JWT Input

¿Qué es un JWT?

Un JSON Web Token (JWT) es un estándar abierto (RFC 7519) que define una forma compacta y autocontenida de transmitir información entre partes como un objeto JSON. La información puede verificarse porque está firmada digitalmente, ya sea con un secreto (HMAC) o con un par de claves pública/privada (RSA o ECDSA).

Un JWT tiene la forma xxxxx.yyyyy.zzzzz, donde cada sección está codificada en Base64URL y separada por un punto.

¿Para qué se usa?

  • Autenticación: tras el login, el servidor emite un JWT que el cliente adjunta en cada petición para demostrar su identidad, sin consultar la base de datos en cada request.
  • Autorización: el token puede incluir roles y permisos del usuario para que el servidor decida qué recursos puede acceder.
  • Intercambio de información: al estar firmado, cualquier sistema receptor puede verificar que el contenido no fue alterado en tránsito.
  • Single Sign-On (SSO): su pequeño tamaño y portabilidad lo hacen ideal para sistemas federados donde múltiples servicios comparten autenticación.

Las tres partes

Header

Indica el tipo de token (JWT) y el algoritmo de firma usado (HS256, RS256, etc.).

Payload

Contiene los claims: datos del usuario y metadatos del token como iat (emitido), exp (expiración) y sub (sujeto).

Signature

El resultado de firmar base64(header) + "." + base64(payload) con la clave secreta. Garantiza integridad.

Beneficios

Sin estado

El servidor no necesita almacenar sesiones. Toda la info viaja en el token.

Escalable

Ideal para microservicios y arquitecturas distribuidas donde múltiples servidores deben autenticar.

Multiplataforma

Funciona en web, móvil e IoT. JSON es universal; Base64URL es seguro para URLs.

Seguro

La firma criptográfica garantiza que el contenido no puede alterarse sin invalidar el token.

Claims estándar

ClaimSignificado
issIssuer — quién emitió el token
subSubject — identificador del usuario o entidad
audAudience — destinatario(s) para quien fue emitido
expExpiration time — cuándo expira (Unix timestamp)
nbfNot before — no válido antes de esta fecha
iatIssued at — cuándo fue emitido (Unix timestamp)
jtiJWT ID — identificador único del token

Datos curiosos

  • No es cifrado, es firmado. El payload de un JWT es solo Base64URL, cualquiera puede leerlo. Nunca guardes contraseñas o datos sensibles en él sin cifrar.
  • Se pronuncia "jot". El RFC 7519 lo establece explícitamente. Decir "jay-double-u-tee" es técnicamente incorrecto (aunque todos lo entiendan).
  • No se pueden invalidar fácilmente. Al ser stateless, revocar un JWT antes de su expiración requiere implementar una lista negra (blocklist), lo que añade estado al servidor.
  • El algoritmo none existe y es peligroso. Algunas librerías antiguas aceptaban tokens con "alg": "none" sin firma, permitiendo ataques de suplantación.
  • El tamaño importa. Un JWT típico pesa entre 200 y 500 bytes. Se envía en cada request, así que un payload muy grande puede degradar el rendimiento perceptiblemente a escala.

JWT Decodificado

Pega un JWT en el panel izquierdo para decodificarlo