Cómo usar el decodificador de JWT
- Pega un JSON Web Token, la cadena larga que suele ir detrás de
Authorization: Bearer. - El encabezado y el payload se decodifican y se muestran como JSON formateado.
- Los claims de tiempo, como
exp,iatynbf, se convierten en fechas legibles, para que veas de un vistazo si el token ha caducado.
Anatomía de un JWT
Un JSON Web Token, definido en el RFC 7519, es una forma compacta de transmitir claims (afirmaciones) entre partes. La forma firmada habitual (JWS) tiene tres partes separadas por puntos:
header.payload.signature
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjMifQ.<signature>
- Encabezado (header): JSON que describe el token, sobre todo el algoritmo de firma.
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9se decodifica como{"alg":"HS256","typ":"JWT"}. - Payload: JSON que contiene los claims, es decir, las afirmaciones sobre el usuario o la sesión.
- Firma (signature): se calcula sobre el encabezado y el payload codificados con un secreto (HMAC, p. ej. HS256) o una clave privada (p. ej. RS256, ES256).
Cada parte se codifica en base64url, el alfabeto Base64 seguro para URL y sin relleno. Por eso los tokens contienen - y _, y por eso los JWT casi siempre empiezan por eyJ: así se codifica el {" inicial de un objeto JSON cuando le sigue un nombre de clave típico en minúsculas. Puedes explorar la propia codificación con el codificador Base64.
Claims registrados
| Claim | Nombre | Significado |
|---|---|---|
iss | Emisor (issuer) | Quién creó y firmó el token. |
sub | Sujeto (subject) | A quién se refiere el token, normalmente un ID de usuario. |
aud | Audiencia (audience) | A qué servicio o servicios va destinado el token. |
exp | Caducidad (expiration time) | Marca de tiempo Unix a partir de la cual el token debe rechazarse. |
nbf | No antes de (not before) | Marca de tiempo Unix antes de la cual el token aún no es válido. |
iat | Emitido en (issued at) | Marca de tiempo Unix del momento en que se creó el token. |
jti | ID del JWT | Identificador único, útil para evitar la reutilización. |
En el RFC 7519 todos son opcionales; cada aplicación decide cuáles exige. Los claims de tiempo van en segundos, no en milisegundos; el conversor de timestamp Unix explica la diferencia.
Errores habituales
Decodificar no es verificar
Cualquiera puede decodificar un JWT; es justo lo que hace esta herramienta. Decodificar te dice lo que un token afirma, no si esas afirmaciones son auténticas. Un servidor debe verificar la firma con la clave correcta y comprobar exp, nbf, iss y aud antes de fiarse de nada del payload.
El payload no es secreto
Cualquiera que tenga un JWT firmado puede leerlo. No pongas en el payload contraseñas, datos personales que no expondrías al cliente ni secretos internos. Si el contenido debe ser confidencial, usa un JWT cifrado (JWE) o guarda los datos en el servidor.
alg: none y confusión de algoritmos
Las especificaciones JOSE definen un valor "alg": "none" para tokens sin protección con la firma vacía. Una biblioteca que haga caso al propio encabezado del token podría aceptar un token falsificado como este:
{"alg": "none", "typ": "JWT"}
{"sub": "admin"}
(firma vacía)
Un ataque relacionado cambia un token RS256 a HS256 para que la clave pública se use indebidamente como secreto HMAC. La defensa es la misma en ambos casos: configura en el servidor los algoritmos permitidos y no dejes nunca que el token los elija.
Consejos
- Haz que los tokens de acceso duren poco y usa tokens de actualización (refresh tokens) para sesiones más largas.
- Permite un pequeño desfase de reloj (por ejemplo, un minuto) al comprobar
expynbfentre servidores. - Usa una biblioteca de JWT bien mantenida en lugar de analizar y verificar los tokens a mano.
Preguntas frecuentes
¿Puede esta herramienta verificar la firma de un JWT?
La verificación requiere el secreto o la clave pública del emisor y debe hacerse en tu backend. Esta herramienta sirve para inspeccionar el encabezado y los claims de un token mientras depuras.
¿Por qué mi token aparece como caducado?
El claim exp es anterior a la hora actual de tu dispositivo. Comprueba que tu reloj esté bien y que el emisor haya escrito exp en segundos.
¿Los JWT están cifrados?
Los JWT firmados (JWS), que son la inmensa mayoría de los que se usan, solo están codificados y firmados, así que cualquiera puede leerlos. Los JWT cifrados (JWE) tienen cinco partes en lugar de tres.
¿Es seguro pegar mi token aquí?
La decodificación se hace en local y no se transmite nada. Como norma general, evita pegar tokens de producción activos en cualquier herramienta online que no hayas revisado.
Actualizado