bitlvl
ES

Decodificador JWT

Pega un token para leer lo que contiene. Los tiempos se traducen a fechas, la caducidad se comprueba contra tu reloj y los tokens firmados con HMAC pueden verificarse con el secreto. Nada se envía a ningún sitio.

 

Los tokens firmados con RS256, ES256 o EdDSA necesitan la clave pública del emisor y no se verifican aquí, pero se decodifican con normalidad.

Cabecera

Carga

Los resultados y mensajes de esta herramienta se muestran en inglés.

Anatomía de un JWT

Un JSON Web Token (RFC 7519) son tres partes codificadas en Base64URL unidas por puntos: cabecera.carga.firma. La cabecera dice qué algoritmo lo firmó. La carga es un objeto JSON de claims sobre el sujeto. La firma cubre las dos primeras partes, así que un verificador puede saber si algo se alteró.

Las dos primeras partes solo están codificadas, no cifradas. Cualquiera que tenga el token puede leer todos los claims, por eso este decodificador funciona sin clave, y por eso un JWT nunca debe llevar secretos.

Claims estándar

ClaimSignificado
issEmisor: quién creó el token
subSujeto: de quién trata el token, normalmente un ID de usuario
audAudiencia: para qué servicio está pensado el token; los verificadores deben comprobarlo
expCaducidad, como marca de tiempo Unix en segundos
nbfNot before: el token no es válido hasta ese momento
iatEmitido el
jtiID único del token, usado en listas de revocación

Algoritmos de firma

HS256 (HMAC con SHA-256) usa un secreto compartido tanto para firmar como para verificar, así que quien puede verificar también puede falsificar; sirve para un servicio que habla consigo mismo. RS256, ES256 y EdDSA usan una clave privada para firmar y una pública para verificar, que es lo que usan los proveedores de identidad (Auth0, Keycloak, Google, Azure AD) para que cualquier servicio compruebe tokens sin poder emitirlos. Las claves públicas suelen publicarse en una URL /.well-known/jwks.json.

Lo que los verificadores deben comprobar

  1. La firma, con una clave adecuada para el alg de la cabecera, y sin aceptar nunca "alg": "none".
  2. Que exp está en el futuro y nbf, si existe, en el pasado (con algo de tolerancia al desfase de reloj).
  3. Que iss y aud tienen los valores esperados.

Preguntas

¿Es seguro pegar mi token aquí?

El token lo decodifica JavaScript en tu navegador y no se transmite. Aun así, un token es una credencial: trátalo como una contraseña y prefiere tokens de prueba de corta duración al depurar.

¿Por qué el decodificador dice que mi token ha caducado?

Su claim exp es anterior al reloj de tu ordenador. Los tokens suelen ser de corta duración (de minutos a horas); consigue uno nuevo del endpoint de login o refresh. Si tu reloj va mal, la comprobación también irá mal.

¿Puedo verificar un token RS256 aquí?

En esta versión no. RS256 necesita la clave pública del emisor (de su endpoint JWKS). El decodificador muestra cabecera, carga y comprobaciones de tiempo para cualquier algoritmo; solo los algoritmos HMAC pueden verificarse con un secreto.

¿Por qué la carga es legible sin el secreto?

Porque un JWT está firmado, no cifrado. Base64URL es reversible por diseño. Si el contenido debe ocultarse, el token tiene que cifrarse como JWE, que se parece pero tiene cinco partes.

¿Qué significa la marca de tiempo de exp?

Segundos desde el 1 de enero de 1970 UTC (tiempo Unix). El decodificador la convierte a una fecha en tu zona horaria y muestra cuánto queda. Usa la herramienta de marcas de tiempo Unix para convertir otros valores.