@@ -111,9 +111,9 @@ intercept requests to this route:
111111 throw new \LogicException('This code should never be reached');
112112 }
113113 }
114-
114+
115115 .. code-block :: php-attributes
116-
116+
117117 // src/Controller/SecurityController.php
118118 namespace App\Controller;
119119
@@ -428,6 +428,13 @@ The signed URL contains 3 parameters:
428428 properties. Whenever these change, the hash changes and previous login
429429 links are invalidated.
430430
431+ For a user that returns ``user@example.com `` on ``$user->getUserIdentifier() ``
432+ call, the generated login link looks like this:
433+
434+ .. code-block :: text
435+
436+ http://example.com/login_check?user=user@example.com&expires=1675707377&hash=f0Jbda56Y...A5sUCI~TQF701fwJ...7m2n4A~
437+
431438 You can add more properties to the ``hash `` by using the
432439``signature_properties `` option:
433440
@@ -673,6 +680,23 @@ user create this POST request (e.g. by clicking a button)::
673680 </form>
674681 {% endblock %}
675682
683+ Hashing Strategy
684+ ~~~~~~~~~~~~~~~~
685+
686+ Internally, the :class: `Symfony\\ Component\\ Security\\ Http\\ LoginLink\\ LoginLinkHandler `
687+ implementation uses the
688+ :class: `Symfony\\ Component\\ Security\\ Core\\ Signature\\ SignatureHasher ` to create the
689+ hash contained in the login link.
690+
691+ This hasher creates a first hash with the expiration
692+ date of the link, the values of the configured signature properties and the
693+ user identifier. The used hashing algorithm is SHA-256.
694+
695+ Once this first hash is processed and encoded in Base64, a new one is created
696+ from the first hash value and the ``kernel.secret `` container parameter. This
697+ allows Symfony to sign this final hash, which is contained in the login URL.
698+ The final hash is also a Base64 encoded SHA-256 hash.
699+
676700Customizing the Success Handler
677701-------------------------------
678702
0 commit comments