JSON Web Tokens explicados

Los JWT están en todos los inicios de sesión y API modernos. Esta guía explica cómo se construyen, cómo leerlos y cómo usarlos con seguridad.

Abrir la herramienta: Decodificador JWT

Las tres partes

Un JWT tiene la forma xxxxx.yyyyy.zzzzz. La primera parte es el encabezado, un objeto JSON con el algoritmo (alg) y el tipo (typ). La segunda es el payload con los claims. La tercera es la firma, calculada sobre las dos primeras con un secreto o una clave privada. Cada parte está en base64url para que sea segura en URL y cabeceras HTTP.

Claims registrados

  • iss (emisor): quién creó y firmó el token.
  • sub (sujeto): el usuario o servicio al que se refiere.
  • aud (audiencia): qué aplicación debe aceptarlo.
  • exp (caducidad): cuándo deja de ser válido.
  • nbf (no antes de): cuándo empieza a ser válido.
  • iat (emitido el): cuándo se creó.
  • jti (ID del JWT): un ID único que sirve para bloquear reutilizaciones.

Tokens de acceso y tokens de ID

En OpenID Connect, un token de ID indica a la aplicación cliente quién inició sesión e incluye claims de perfil como el nombre y el correo. Un token de acceso se envía a una API para demostrar qué puede hacer quien llama, a menudo con un claim scope. Los tokens de acceso deben durar poco, normalmente de minutos a una hora, y renovarse con un token de actualización.

Errores que hay que evitar

  • Decodificar un token sin verificarlo y confiar en sus claims.
  • Aceptar el algoritmo que indica el token en lugar del que espera tu servidor.
  • Usar un secreto HMAC corto o fácil de adivinar. Usa al menos 32 bytes aleatorios.
  • Guardar datos sensibles en el payload.
  • Emitir tokens que nunca caducan o tokens de acceso de muy larga duración.