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
¿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
- 1Pega un token en el panel Token o elige uno de Examples. El prefijo
Bearer, el nombre de cabeceraAuthorization:, las comillas y los saltos de línea se ignoran, y la cabecera del panel indica qué se ignoró. - 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,nbfyexpcomo fechas en tu zona horaria, con cuánto tiempo ha pasado o falta. - 3La barra de estado muestra el algoritmo, cuándo caduca o caducó el token y si se comprobó la firma. Los avisos, como
alg: noneo la falta deexp, aparecen arriba en Claims. - 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.
- 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_uridel emisor y pégalo otra vez; la herramienta elige la clave cuyokidcoincide 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.