Decodificador JWT

Lee los claims y la caducidad de un JWT y comprueba firmas HS256, HS384 y HS512.

Decodificar no es verificar. Cualquiera puede leer o falsificar el contenido de un token; solo una comprobación de la firma demuestra que no se ha modificado.

Opcional. Se usa solo en esta página y no se envía a ningún sitio.

Pega un token para leerlo.

Qué hace esta herramienta

Un JSON Web Token (JWT) es la cadena larga de letras y puntos que muchas API y sistemas de inicio de sesión entregan al identificarte. Esta herramienta lo abre: muestra la cabecera y el payload como JSON legible, convierte los claims de tiempo en fechas reales en tu zona horaria y dice si el token ha caducado. Si el token está firmado con un secreto compartido (HS256, HS384 o HS512), puedes escribir el secreto para comprobar también la firma. El token se lee en tu navegador y no se envía a ningún sitio, algo importante porque un token vigente es una llave a la cuenta de alguien.

Decodificar no es verificar

Esto es lo más importante de los JWT. La cabecera y el payload solo están codificados en Base64URL, no cifrados, así que cualquiera con el token puede leerlos, y cualquiera puede escribir un token con el contenido que quiera. Ver "admin": true en un token decodificado no prueba nada. Solo la comprobación de la firma demuestra que el token lo creó alguien que conoce el secreto o la clave privada y que no se modificó después. Los servidores deben verificar la firma en cada petición y decidir ellos qué algoritmos aceptan, sin fiarse nunca del campo alg del token; un token con alg: none no está firmado y es un ataque clásico.

Las tres partes

Un token son tres cadenas Base64URL unidas por puntos: cabecera.payload.firma. En el token de ejemplo más conocido, la cabecera es {"alg":"HS256","typ":"JWT"} y el payload {"sub":"1234567890","name":"John Doe","iat":1516239022}. La firma es un HMAC de 32 bytes de las dos primeras partes. Puedes comprobarlo: con el secreto your-256-bit-secret el ejemplo se verifica y con cualquier otro no. Pulsa Ejemplo para probarlo.

Leer las fechas

Tres claims contienen tiempos, todos como número de segundos desde el 1 de enero de 1970 UTC:

  • exp es cuándo deja de ser válido. Desde ese instante el token debe rechazarse.
  • nbf (not before) es cuándo empieza a ser válido.
  • iat (issued at) es cuándo se creó.

La herramienta muestra cada uno como fecha en tu zona horaria, como ISO 8601 en UTC y en forma relativa, por ejemplo "hace 3 días". Con iat 1516239022 y exp 1516242622 las fechas son el 18 de enero de 2018 a las 01:30:22 y 02:30:22 UTC, es decir, el token duró una hora. Un error frecuente es escribir exp en milisegundos: queda decenas de miles de años en el futuro. Si un claim no es un número de segundos válido, la herramienta lo dice en vez de mostrar una fecha falsa.

Comprobar una firma

En HS256, HS384 y HS512 la firma es un HMAC con SHA-256, SHA-384 o SHA-512 sobre cabecera.payload, usando el secreto. Escribe el secreto, o marca que está en Base64URL si tu sistema lo guarda así. La comprobación usa Web Crypto del navegador y el secreto no sale de la página. Los tokens RS256, ES256 y similares usan una clave privada y se comprueban con una clave pública, algo que esta herramienta no hace; lo dice en lugar de adivinar.

Problemas habituales

  • "Un JWT tiene tres partes." Copiaste solo una parte, o se coló un salto de línea o unas comillas. La herramienta quita un Bearer inicial y los espacios alrededor.
  • Base64URL o JSON no válido. El token está cortado o no es un JWT.
  • Cinco partes. Es un token cifrado (JWE) y no se puede leer sin la clave.
  • Firma válida pero "Caducado". La firma está bien; el token simplemente es demasiado viejo. Una diferencia de uno o dos minutos entre relojes de servidores es normal, por eso muchos sistemas permiten un pequeño margen.

Preguntas frecuentes

¿Es seguro pegar mi token aquí?

El token se decodifica en tu navegador y no se sube. Aun así, trata los tokens vigentes como contraseñas: usa uno de prueba o uno caducado y no compartas uno válido.

¿Decodificar un JWT demuestra que es auténtico?

No. El contenido solo está codificado, así que cualquiera puede leerlo o falsificarlo. Solo la comprobación de la firma con el secreto o la clave correctos demuestra que es auténtico y no cambió.

¿Por qué no puedo comprobar mi token RS256 o ES256?

Esos algoritmos se firman con una clave privada y se verifican con la clave pública. Esta herramienta solo comprueba los de secreto compartido: HS256, HS384 y HS512.

¿Qué significan exp, iat y nbf?

exp es la hora de caducidad, iat es cuándo se emitió y nbf es el instante antes del cual no debe aceptarse. Los tres son segundos desde el 1 de enero de 1970 UTC.