Développement & Déploiement

Gérer l'authentification JWT avec Symfony et React

Tokens d'accès/refresh, intercepteurs client et bonnes pratiques.

O
Online Toolset TeamEditorial Team
8 min de lecture

Le couple Symfony + React avec JWT permet une authentification stateless, idéale pour les SPA et applications mobiles, avec un cycle access/refresh sécurisé.

À retenir (TL;DR) Access token court en mémoire + refresh token en cookie httpOnly SameSite/Secure. Intercepteurs (Axios/Fetch) pour ajouter Bearer et relancer la requête après 401 si le refresh réussit. Côté Symfony: LexikJWTAuthenticationBundle, expiration courte, rotation/blacklist de refresh, rate limiting.

Principe JWT

  • Structure: header.payload.signature (Base64URL). Standard:RFC 7519
  • Ne pas stocker de secrets dans le payload. Les claims sont lisibles côté client.
  • Signature HS256/RS256. Préférez RS256 en prod (clés asymétriques).

Symfony (serveur)

  • Bundle recommandé:LexikJWTAuthenticationBundle(génèreprivate.pem/public.pem).
  • Endpoints usuels:POST /login_check(délivre access+refresh),POST /token/refresh.
  • security.yaml: firewalls publics vs protégés, authenticatorjwt,access_control.
  • Optionnel: API Platform pour exposer les ressources et sécuriser via expressionssecurity.

React (client)

  • Stocker l'access token en mémoire (state), éviterlocalStoragesi possible.
  • Refresh token en cookie httpOnly + SameSite=Lax/Strict, Secure en HTTPS.
  • Intercepteurs Axios/Fetch: ajouterAuthorization: Bearer; sur 401 essayer un refresh une fois.
  • Gestion requêtes: React Query ou RTK Query pour retries, invalidation et états.

Flux de rafraîchissement

  1. Requête avec access token.
  2. Si 401 expiration, appeler/token/refresh(le cookie refresh est envoyé automatiquement).
  3. Si OK → mettre à jour l'access token en mémoire et relancer la requête initiale.
  4. Si KO → forcer le logout et rediriger vers login.

Bonnes pratiques

  • Access tokens 5–15 min; refresh 7–30 jours avec rotation et liste de révocation côté serveur.
  • Claims minimaux; pas de données sensibles; définiraud,iss,exp.
  • CSRF: si endpoints utilisent des cookies, protéger via token CSRF et SameSite approprié.
  • Rate‑limit/login_checket/token/refresh; journaliser les tentatives.

Outils cités

  • LexikJWTAuthenticationBundle
  • API Platform
  • Axios, React Query / Redux Toolkit Query
  • Symfony Security
JWTSymfonyReactSécurité

À propos de l'auteur

O
Online Toolset TeamEditorial Team

The Online Toolset editorial team produces practical guides on web development, image optimization, productivity, and digital tools.

Web DevelopmentImage OptimizationDevOpsUI/UXProductivity