Desarrollo y Despliegue

Gestionar la autenticación JWT con Symfony y React

Tokens de acceso/refresh, interceptores en el cliente y buenas prácticas.

O
Online Toolset TeamEditorial Team
9 min de lectura

Usar Symfony + React con JWT permite una autenticación sin estado, ideal para SPAs y clientes móviles.

Para recordar (TL;DR) Access token corto en memoria + refresh token en cookie httpOnly con SameSite/Secure. Interceptores (Axios/Fetch) añaden Bearer y rehacen la petición tras 401 si el refresh funciona. En el servidor: LexikJWTAuthenticationBundle, expiración corta, rotación de refresh y revocación.

Conceptos básicos de JWT

  • Estructura: header.payload.signature (Base64URL). Estándar:RFC 7519
  • No guardar secretos en el payload. Los claims pueden ser leídos por el cliente.
  • Firmado (HS256/RS256). Preferir claves asimétricas (RS256) en producción.

Symfony (servidor)

  • Bundle recomendado:LexikJWTAuthenticationBundle. Generaprivate.pem/public.pem.
  • Endpoints típicos:POST /login_check(devuelve access+refresh),POST /token/refresh.
  • security.yaml: firewalls para rutas públicas vs protegidas,jwtauthenticator,access_control.
  • Opcional: API Platform para exponer recursos y proteger operaciones consecurityexpressions.

React (cliente)

  • Almacenar el access token en memoria (estado), nunca enlocalStoragesi puedes evitarlo.
  • Guardar el refresh token en cookie httpOnly + SameSite=Lax/Strict, Secure en HTTPS.
  • Interceptores Axios/Fetch: adjuntarAuthorization: Bearer, y si hay 401 intentar refresh una sola vez.
  • Integración: React Query o RTK Query para reintentos, invalidación de cache y control de estados.

Flujo de renovación

  1. Petición con access token.
  2. Si 401 por expiración, llamar/token/refresh(cookie refresh viaja automáticamente).
  3. Si refresh OK → actualizar access token en memoria y reintentar la petición original.
  4. Si refresh falla → logout forzado y redirigir a login.

Buenas prácticas

  • Access tokens de 5–15 min; refresh tokens de 7–30 días con rotación y revocación en servidor.
  • Scopes/roles mínimos en el token; evitar datos sensibles. Añadiraud,iss,exp.
  • CSRF: para endpoints que usan cookies, proteger con CSRF tokens o SameSite adecuado.
  • Rate limit de/login_checky/token/refresh; registrar intentos.

Herramientas mencionadas

  • LexikJWTAuthenticationBundle
  • API Platform
  • Axios, React Query / RTK Query
  • Symfony Security
JWTSymfonyReactSeguridad

Sobre el autor

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