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. Genera
private.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 con
securityexpressions.
React (cliente)
- Almacenar el access token en memoria (estado), nunca en
localStoragesi puedes evitarlo. - Guardar el refresh token en cookie httpOnly + SameSite=Lax/Strict, Secure en HTTPS.
- Interceptores Axios/Fetch: adjuntar
Authorization: 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
- Petición con access token.
- Si 401 por expiración, llamar
/token/refresh(cookie refresh viaja automáticamente). - Si refresh OK → actualizar access token en memoria y reintentar la petición original.
- 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ñadir
aud,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