Qué es
JWT significa JSON Web Token (se pronuncia “yot”). Es el estándar más usado para transmitir información de identidad y permisos entre sistemas de forma segura.
Cuando una API dice que necesitas un “token” para autenticarte, en la mayoría de los casos moderno ese token es un JWT.
La estructura de un JWT
Un JWT tiene 3 partes separadas por puntos:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.
eyJzdWIiOiIxMjM0NTY3ODkwIiwibm9tYnJlIjoiQW5hIEdhcmPDrWEiLCJyb2wiOiJhZG1pbiIsImlhdCI6MTY0MDAwMDAwMCwiZXhwIjoxNjQwMDA3MjAwfQ.
SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
1. Header (Encabezado)
Indica el algoritmo de firma usado:
{
"alg": "HS256",
"typ": "JWT"
}
2. Payload (Carga útil)
Los datos que queremos transmitir:
{
"sub": "1234567890",
"nombre": "Ana García",
"rol": "admin",
"iat": 1640000000,
"exp": 1640007200
}
3. Signature (Firma)
Garantiza que el token no fue modificado. Se calcula con header + payload + clave secreta.
Cómo funciona la autenticación con JWT
1. Usuario hace login (email + password)
↓
2. Servidor verifica credenciales
↓
3. Servidor genera JWT firmado con clave secreta
↓
4. Servidor envía JWT al cliente
↓
5. Cliente guarda JWT (localStorage o cookie segura)
↓
6. En cada petición, cliente envía: Authorization: Bearer <JWT>
↓
7. Servidor verifica la firma → si válida, procesa la petición
Ventajas del JWT
| Ventaja | Descripción |
|---|---|
| Sin estado | El servidor no necesita guardar sesiones en base de datos |
| Portable | El mismo token funciona en múltiples servicios |
| Auto-contenido | El token lleva la información del usuario — no hay que consultarla |
| Verificable | Cualquier servicio con la clave pública puede verificarlo |
Campos estándar del Payload
| Campo | Nombre | Descripción |
|---|---|---|
sub | Subject | Identificador del usuario |
iss | Issuer | Quién emitió el token |
aud | Audience | Para quién es el token |
exp | Expiration | Cuándo vence |
iat | Issued At | Cuándo fue emitido |
nbf | Not Before | Desde cuándo es válido |
Buenas prácticas de seguridad
✅ Hacer:
- Usar tiempos de expiración cortos (
exp) — 15 minutos a 24 horas - Transmitir siempre por HTTPS
- Almacenar tokens en cookies
HttpOnlypara webs (no en localStorage) - Usar algoritmos seguros (RS256 para producción, HS256 para desarrollo)
❌ No hacer:
- Guardar datos sensibles en el payload (es encodado, no encriptado)
- Crear tokens que nunca expiran
- Transmitir por HTTP sin cifrado
JWT vs Sesiones tradicionales
| Aspecto | Sesión tradicional | JWT |
|---|---|---|
| Almacenamiento | En servidor (DB o Redis) | En cliente (token) |
| Escalabilidad | Requiere sesiones compartidas | Cualquier servidor puede verificar |
| Revocación | Inmediata (borra la sesión) | Compleja (debe esperar a que expire o usar lista negra) |
| Tamaño | ID pequeño | Token más grande |
| Idóneo para | Apps web tradicionales | APIs, microservicios, apps móviles |
Términos relacionados
- [[API]] - Las APIs usan JWT para autenticar quién hace cada petición
- [[REST]] - Las APIs REST usan JWT en el header
Authorization - [[Shift-Left Security]] - La seguridad de tokens debe pensarse desde el diseño
- [[Microservices]] - JWT permite que múltiples servicios validen identidad sin coordinación central
Recursos adicionales:
- JWT.io - Decodificador visual de tokens JWT
- Auth0 - Introducción a JWT