General Intermedio

JWT

JSON Web Token. Estándar abierto para transmitir información de forma segura entre partes como un objeto JSON compacto y auto-contenido, firmado digitalmente.

Pronunciación

/dʒɒt/
"yot"
Escuchar en: Forvo Cambridge

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

VentajaDescripción
Sin estadoEl servidor no necesita guardar sesiones en base de datos
PortableEl mismo token funciona en múltiples servicios
Auto-contenidoEl token lleva la información del usuario — no hay que consultarla
VerificableCualquier servicio con la clave pública puede verificarlo

Campos estándar del Payload

CampoNombreDescripción
subSubjectIdentificador del usuario
issIssuerQuién emitió el token
audAudiencePara quién es el token
expExpirationCuándo vence
iatIssued AtCuándo fue emitido
nbfNot BeforeDesde 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 HttpOnly para 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

AspectoSesión tradicionalJWT
AlmacenamientoEn servidor (DB o Redis)En cliente (token)
EscalabilidadRequiere sesiones compartidasCualquier servidor puede verificar
RevocaciónInmediata (borra la sesión)Compleja (debe esperar a que expire o usar lista negra)
TamañoID pequeñoToken más grande
Idóneo paraApps web tradicionalesAPIs, 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: