« JWT SPA symfony exercice pratique » : différence entre les versions

 
(5 versions intermédiaires par le même utilisateur non affichées)
Ligne 234 : Ligne 234 :


===== security.yaml =====
===== security.yaml =====
<pre>
<syntaxhighlight lang="yaml" line>
security:
security:
   firewalls:
   firewalls:
Ligne 242 : Ligne 242 :
         check_path: /api/login
         check_path: /api/login
         success_handler: App\Service\Authentication\LoginSuccessHandler
         success_handler: App\Service\Authentication\LoginSuccessHandler
</pre>
</syntaxhighlight>


===== LoginSuccessHandler =====
===== LoginSuccessHandler =====
<pre>
<syntaxhighlight lang="php" line>
    <?php
<?php
     declare(strict_types=1);
     declare(strict_types=1);
     namespace App\Service\Authentication;
     namespace App\Service\Authentication;
Ligne 292 : Ligne 292 :
         }
         }
     }
     }
</pre>
</syntaxhighlight>


Nous allons maintenant obtenir un cookie de sécurité que nous vous enverrons à chaque demande et qui n'est pas accessible par Javascript. Mais ce n'est pas évalué pour le moment, alors faisons-le.
Nous allons maintenant obtenir un cookie de sécurité que nous vous enverrons à chaque demande et qui n'est pas accessible par Javascript. Mais ce n'est pas évalué pour le moment, alors faisons-le.
Ligne 301 : Ligne 301 :


===== security.yaml =====
===== security.yaml =====
<pre>
<syntaxhighlight lang="yaml" line>
security:
security:
   firewalls:
   firewalls:
Ligne 311 : Ligne 311 :
         authenticators:
         authenticators:
           - App\Service\Authentication\JWTAndSecurityCookieAuthenticator
           - App\Service\Authentication\JWTAndSecurityCookieAuthenticator
</pre>
</syntaxhighlight>


===== JWTAndSecurityCookieAuthenticator =====
===== JWTAndSecurityCookieAuthenticator =====
<pre>  
<syntaxhighlight lang="php" line>
    <?php
<?php
     declare(strict_types=1);
     declare(strict_types=1);
     namespace App\Service\Authentication;
     namespace App\Service\Authentication;
Ligne 363 : Ligne 363 :
         }
         }
     }
     }
</pre>
</syntaxhighlight>




Ligne 376 : Ligne 376 :


===== routes.yaml =====
===== routes.yaml =====
<pre>
<syntaxhighlight lang="yaml" line>
api_refresh_token:
api_refresh_token:
     path: '/api/token/refresh'
     path: '/api/token/refresh'
     defaults: { _controller: gesdinet.jwtrefreshtoken:refresh }
     defaults: { _controller: gesdinet.jwtrefreshtoken:refresh }
     methods: [POST]  
     methods: [POST]  
</pre>
</syntaxhighlight>


*Nous utilisons le suivant
*Nous utilisons le suivant


<pre>
<syntaxhighlight lang="yaml" line>
api_refresh_token:
api_refresh_token:
     path: '/api/token/refresh'
     path: '/api/token/refresh'
     defaults: { _controller: App\Service\Authentication\RefreshTokenSecurityCookieService:refresh }
     defaults: { _controller: App\Service\Authentication\RefreshTokenSecurityCookieService:refresh }
     methods: [POST]
     methods: [POST]
</pre>
</syntaxhighlight>


La copie complète est annotée avec les espaces où je place la validation du cookie et la création du cookie après l'ajout du nouveau jeton d'actualisation.
La copie complète est annotée avec les espaces où je place la validation du cookie et la création du cookie après l'ajout du nouveau jeton d'actualisation.


===== RefreshTokenSecurityCookieService =====
===== RefreshTokenSecurityCookieService =====
<pre>
<syntaxhighlight lang="php" line>
    <?php
<?php
     declare(strict_types=1);
     declare(strict_types=1);
     namespace App\Service\Authentication;
     namespace App\Service\Authentication;
Ligne 536 : Ligne 536 :
         }
         }
     }
     }
</pre>
</syntaxhighlight>


De cette façon, lorsqu'un nouveau JWT est demandé, le jeton d'actualisation et le cookie sont validés. Un nouveau cookie est également émis ici, car chaque fois que le JWT est demandé, un nouveau jeton d'actualisation est émis et l'ancien cookie a donc été invalidé.
De cette façon, lorsqu'un nouveau JWT est demandé, le jeton d'actualisation et le cookie sont validés. Un nouveau cookie est également émis ici, car chaque fois que le JWT est demandé, un nouveau jeton d'actualisation est émis et l'ancien cookie a donc été invalidé.


[[Category:Symfony]] [[Category:JWT]]
[[Category:Symfony]] [[Category:JWT]]