Decodificador JWT
Decodifica el header y el payload de un JWT en tu navegador, revisa exp/nbf/iat y verifica firmas HS256/384/512 o RS256/384/512. Los tokens no salen del equipo.
Tus datos de entrada y archivos no salen del navegador
Pegue un JWT (header.payload.signature) o cargue un token de demostración.
- Encabezado
- Carga útil
- Firma
Verificar Firma
El encabezado, la carga útil y las fechas aparecerán aquí al pegar un token.
Las comprobaciones de tiempo no demuestran la autenticidad.
En esta página
Pega un JSON Web Token para ver su header y su payload como JSON formateado, el algoritmo de firma y cuándo se emitió, cuándo empieza a ser válido y cuándo caduca. Opcionalmente, verifica la firma con un secreto compartido o una clave pública RSA.
Funcionalidad detallada
La decodificación se hace mientras escribes: el header y el payload se decodifican desde base64url y se formatean en el orden original de los claims del token. Un Bearer inicial y los saltos de línea copiados de una cabecera HTTP se eliminan automáticamente. Los claims de tiempo registrados exp, nbf e iat se muestran como fechas en tu zona horaria local, y un token caducado o aún no válido se marca.
La verificación de la firma se ejecuta en un módulo criptográfico de Rust compilado a WebAssembly y usa el algoritmo indicado en el header del token: HS256, HS384 y HS512 con un secreto compartido (usado como texto UTF-8), RS256, RS384 y RS512 con una clave pública RSA en PEM (BEGIN PUBLIC KEY o BEGIN RSA PUBLIC KEY). En su lugar puede pegar un JWK o un JWKS (por ejemplo de /.well-known/jwks.json de un proveedor de identidad): la clave se elige por el kid del token (sin kid se prueban todas las claves compatibles con el algoritmo) y se verifica con la Web Crypto API del navegador, que cubre también PS256/384/512, ES256/384/512 y EdDSA (Ed25519). Un token con alg: none siempre se indica como sin firma, nunca como válido.
Los tokens y las claves se quedan en la página: no se envía nada a un servidor ni se guarda. Recuerda que decodificar no demuestra la autenticidad; solo una firma verificada lo hace.
Ejemplos prácticos
Ejemplo de jwt.io: el token eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIi… se decodifica en el header {"alg":"HS256","typ":"JWT"} y un payload con sub, name e iat; el secreto your-256-bit-secret da «Firma Verificada» y cualquier otro, «Firma Inválida».
Token caducado: un payload con "exp": 1767225600 se marca como caducado el 1 de enero de 2026 (mostrado en tu zona horaria local).
Desde una cabecera Authorization: pega Bearer eyJ… tal cual; el prefijo y los saltos de línea se eliminan antes de decodificar.
Token sin firma: eyJhbGciOiJub25lIn0.eyJzdWIiOiIxIn0. se decodifica en {"alg":"none"} y {"sub":"1"} y se indica como sin firma y no fiable.
Cómo usar esta herramienta
Pega el token
Pega el JWT en JWT codificado; la decodificación empieza al instante.
Lee el header y el payload
Revisa el Encabezado (Header) y la Carga útil (Payload) formateados, la insignia del algoritmo y las fechas de emisión, validez y caducidad bajo el payload.
Verifica la firma
En Verificar Firma, introduce el secreto HMAC o la clave pública PEM en Secreto / clave pública RSA. El estado indica si la firma es válida.
Consejos y mejores prácticas
- Cualquiera puede decodificar un JWT: nunca pongas contraseñas ni otros secretos en el payload.
- El secreto HMAC se usa exactamente como se escribe. Si tu backend lo guarda en base64, decodifícalo antes: pegar la cadena base64 da «Firma Inválida».
- Para tokens RS* pega la clave pública, no la privada; no se acepta un certificado X.509, extrae antes su clave pública.
- La caducidad se compara con el reloj de tu dispositivo, así que una hora del sistema incorrecta da una marca de caducidad incorrecta.
- ¿Necesitas un token para probar? Créalo con el codificador JWT.