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.

Verificar Firma

Decodificado

El encabezado, la carga útil y las fechas aparecerán aquí al pegar un token.

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

  1. Pega el token

    Pega el JWT en JWT codificado; la decodificación empieza al instante.

  2. 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.

  3. 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.