Decodificador de JWT

Se ejecuta en tu navegador; no se sube nada

Lee la cabecera y los claims de un JSON Web Token, mira cuándo caduca y comprueba su firma con tu secreto o tu clave pública.

Token

Verify signature

Paste a token to check its signature against a secret or public key.

No token yet

The header and payload appear here as JSON, and Claims lists each claim with what it means and when it expires.
Ready

¿Qué es un JWT?

Un JSON Web Token (JWT) es una forma compacta y firmada de pasar claims entre dos partes, casi siempre de un servidor de autenticación a una API. Son tres cadenas Base64url unidas por puntos, header.payload.signature, y las APIs suelen esperarlo en la cabecera Authorization: Bearer <token>.

La cabecera indica cómo está firmado el token, por ejemplo "alg": "HS256" para un HMAC con un secreto compartido o RS256 para un par de claves RSA. El payload contiene los claims: los estándar, como sub (a quién se refiere el token), iat (cuándo se emitió) y exp (cuándo caduca), más lo que añada el emisor, como roles o scopes.

La firma es lo que hace que un token sea fiable. El emisor la calcula sobre la cabecera y el payload con su clave, así que cambiar un solo carácter del payload la rompe. El payload está codificado, no cifrado: cualquiera que tenga el token puede leer todos sus claims, así que nunca metas secretos en él y trata el propio token como una contraseña hasta que caduque.

Cómo usar esta herramienta

  1. 1Pega un token en el panel Token o elige uno de Examples. El prefijo Bearer, el nombre de cabecera Authorization:, las comillas y los saltos de línea se ignoran, y la cabecera del panel indica qué se ignoró.
  2. 2La cabecera, el payload y la firma aparecen en colores dentro del token. Payload y Header muestran cada parte como JSON; Claims lista cada claim con su significado y muestra iat, nbf y exp como fechas en tu zona horaria, con cuánto tiempo ha pasado o falta.
  3. 3La barra de estado muestra el algoritmo, cuándo caduca o caducó el token y si se comprobó la firma. Los avisos, como alg: none o la falta de exp, aparecen arriba en Claims.
  4. 4Para comprobar la firma, escribe el secreto compartido (HS256, HS384, HS512; cambia a Base64 si el secreto está codificado) o pega la clave pública del emisor (RS*, PS*, ES*, EdDSA) como PEM, certificado X.509, JWK o conjunto de JWK. El resultado aparece mientras escribes.
  5. 5Si el token no se puede decodificar, el mensaje indica qué parte y qué carácter fallan; pulsa F8 para seleccionarlo.

Solución de problemas

Este token tiene 5 partes: es un JWE cifrado
Algunos proveedores de identidad emiten tokens cifrados (JWE). Su payload solo se puede leer con la clave privada del destinatario, así que ningún decodificador puede mostrarlo sin esa clave.
+ es Base64 estándar; los JWT usan Base64url
El token se volvió a codificar o se construyó a mano con Base64 estándar. Las partes de un JWT usan - y _ en lugar de + y /, sin relleno =.
La firma no coincide con este secreto
Comprueba que el secreto es exactamente el que usa el emisor, incluidas mayúsculas y espacios finales, y si está guardado en Base64; en ese caso, cambia el formato del secreto a Base64.
Esta es una clave RSA PKCS#1 (BEGIN RSA PUBLIC KEY)
Los navegadores solo importan claves en formato SubjectPublicKeyInfo. Conviértela con openssl rsa -RSAPublicKey_in -in key.pem -pubout, o pega en su lugar el JWK del endpoint JWKS del emisor.
El conjunto de claves no tiene ninguna con este kid
Los emisores rotan sus claves. Descarga el conjunto de JWK actual desde el jwks_uri del emisor y pégalo otra vez; la herramienta elige la clave cuyo kid coincide con la cabecera del token.

Preguntas frecuentes

¿Es seguro pegar aquí un token o un secreto real?

La decodificación y la comprobación de la firma se hacen en tu navegador con Web Crypto, y no se envía nada a ningún sitio. El token se guarda en el almacenamiento de sesión de esta pestaña hasta que lo borras o cierras la pestaña, así que no se pierde al recargar; el secreto o la clave con que verificas nunca se guardan, y los tokens nunca se ponen en enlaces. Aun así, un token vigente da acceso hasta que caduca, así que mejor usa tokens de prueba o caducados, y nunca pegues secretos de firma de producción en una web que no controles.

¿Qué significa "Signature verified"?

Que la cabecera y el payload se firmaron con el secreto o con la clave privada que corresponde a la clave pública que diste. No dice que el token sea aceptable: tu API también debe comprobar exp, nbf, el emisor (iss) y la audiencia (aud), y decidir qué algoritmos acepta.

¿Por qué es peligroso alg none?

Un token con "alg": "none" no tiene firma, así que cualquiera puede escribir uno con los claims que quiera. Las librerías que lo aceptan por error permiten a los atacantes falsificar tokens. Los servidores deben rechazar los tokens sin firma.

¿En qué formato van iat, nbf y exp?

En segundos desde el 1 de enero de 1970 UTC (tiempo Unix). Un valor de 13 dígitos son milisegundos, un error habitual de los emisores de tokens; la herramienta avisa de ello. El conversor de timestamps Unix convierte cualquiera de ellos en una fecha.

¿Por qué rechazan mi token si se decodifica bien?

Las causas habituales son una firma hecha con otra clave, un aud o un iss incorrectos, un token usado antes de su nbf o después de su exp, o relojes que no coinciden entre servidores. Lee la respuesta de error de la API y compara esos claims.