JWT
Concepto de Desarrollo web en Utilidades, conectado con sus herramientas y conceptos vecinos.
Actualizado el 15 de julio de 2026
Un JWT (JSON Web Token) es un estándar abierto (RFC 7519) para transmitir información entre dos partes de forma compacta y verificable. Se usa principalmente para autenticar usuarios en APIs: el servidor emite un token firmado que el cliente envía en cada petición, sin necesidad de mantener sesiones en el servidor.
Estructura de un JWT
Un JWT tiene tres partes separadas por puntos:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6Ik1hcmlhIiwiaWF0IjoxNzE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
- Header: tipo de token y algoritmo de firma (p. ej., HS256 o RS256), codificado en Base64url.
- Payload: los datos que quieres transmitir (claims), también en Base64url. Incluye campos estándar como
sub(sujeto),iat(emitido en) yexp(expiración). - Signature: firma criptográfica del header + payload con una clave secreta. Si alguien modifica el payload, la firma no coincide y el token es rechazado.
¿Cómo funciona el flujo de autenticación?
- El usuario se identifica con usuario y contraseña.
- El servidor verifica las credenciales, genera un JWT firmado y lo devuelve.
- El cliente guarda el token (en memoria,
localStorageo una cookieHttpOnly). - En cada petición, el cliente envía el token en el header:
Authorization: Bearer <token>. - El servidor verifica la firma y extrae los datos del payload sin consultar la base de datos.
Algoritmos de firma más comunes
| Algoritmo | Tipo | Cuándo usarlo |
|---|---|---|
| HS256 | HMAC + SHA-256 | Aplicaciones con un único servidor (clave compartida) |
| RS256 | RSA + SHA-256 | Sistemas distribuidos donde distintos servicios validan el token con la clave pública |
| ES256 | ECDSA + SHA-256 | Igual que RS256 pero con claves más cortas y firma más rápida |
Claims estándar del payload
{
"sub": "usr_42",
"name": "María García",
"email": "maria@ejemplo.es",
"iat": 1716239022,
"exp": 1716242622
}
sub: identificador del sujeto (normalmente el ID de usuario).iat: timestamp Unix de cuándo se emitió el token.exp: timestamp Unix de caducidad. Si la hora actual supera este valor, el token es inválido.
Errores comunes
- Guardar el token en
localStoragesin precaución: cualquier script en la página puede leerlo (riesgo de XSS). Prefiere cookiesHttpOnly+SameSite=Strictpara mayor seguridad. - No validar la expiración: una librería correcta lo hace automáticamente, pero si validas manualmente, comprueba siempre el campo
exp. - Poner datos sensibles en el payload: el payload es legible por cualquiera que tenga el token. Usa solo datos necesarios para autorizar la petición.
- Tokens de larga duración: un token que dura 30 días es casi como no tener expiración. Combina un access token corto (15–60 min) con un refresh token de larga duración almacenado de forma segura.
JWT vs. otros mecanismos de autenticación
Un JWT es autocontenido y sin estado, ideal para microservicios y APIs consumidas desde múltiples clientes. Para aplicaciones web tradicionales con un único servidor, las sesiones de servidor siguen siendo más fáciles de invalidar y controlar. La elección depende de la arquitectura: si necesitas escalar horizontalmente o comunicar servicios independientes, los JWT son la opción natural.
Conceptos relacionados
También en Desarrollo web
Preguntas frecuentes
¿Es seguro el payload de un JWT?
¿Cuál es la diferencia entre JWT y una sesión de servidor?
¿Qué pasa si un JWT es robado?
Ver todas las herramientas de Utilidades.