SuperDevTools

Decodificar JWT en línea

Cuidado con los tokens reales

No pegues un token de producción todavía activo en una web que no conoces: quien lo lea puede usarlo hasta que caduque. Aquí, la decodificación, la verificación y la creación se hacen por completo en tu navegador: no se envía nada y no se guarda ningún token ni secreto.

Pega el token completo (tres partes separadas por puntos). El prefijo «Bearer» se quita solo.

Pega un token para ver su cabecera, su carga útil y sus fechas.

Verificar la firma

Crear un token HS256 de prueba

Un decodificador JWT que no sale de tu navegador

Un JWT (JSON Web Token) es el token que muchas API y aplicaciones intercambian después de iniciar sesión. Esta herramienta sirve para decodificar un JWT: muestra la cabecera y la carga útil en JSON con colores, convierte las fechas, explica cada claim estándar y comprueba la firma si le das el secreto o la clave pública.

La decodificación, la verificación y la creación se hacen por completo en tu navegador: no se envía ningún token y no se guarda nada. Aun así, no pegues un token de producción todavía activo en una web que no conoces: quien lo lea puede usarlo hasta que caduque.

Cómo usarlo

  1. Pega el token en el campo «Token JWT». El prefijo «Bearer» copiado de una cabecera HTTP se quita solo. «Cargar un ejemplo» rellena un token de prueba.
  2. Las tres partes aparecen en color y, debajo, los bloques «Cabecera», «Carga útil» y «Firma». Pasa el ratón por una clave subrayada, como exp o iss, para leer qué significa.
  3. El bloque «Fechas y validez» convierte iat, nbf y exp en fechas legibles e indica el estado: «Caducado hace 3 días», «Válido todavía durante 45 minutos»…
  4. En «Verificar la firma», escribe el secreto compartido para HS256, HS384 o HS512, o pega una clave pública PEM o JWK para RS256, PS256 o ES256. El resultado será «Firma válida» o «Firma no válida».
  5. «Crear un token HS256 de prueba» genera un token a partir de la cabecera, la carga útil y el secreto que elijas.

Cómo es un JWT por dentro

Un JWT firmado tiene tres partes separadas por puntos: cabecera.carga.firma. La cabecera eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9 se decodifica como {"alg": "HS256", "typ": "JWT"} e indica el algoritmo de firma. La carga útil contiene los datos, llamados claims. En el ejemplo de la herramienta es {"sub": "42", "name": "Ejemplo", "iat": 1700000000, "exp": 4102444800}: el token se emitió el 14 de noviembre de 2023 a las 23:13:20, hora peninsular española, y caduca el 1 de enero de 2100 a la 01:00, hora peninsular. La firma sella las dos primeras partes.

Base64url no es cifrado

La cabecera y la carga útil solo están codificadas en base64url, una variante de Base64 que cambia + y / por - y _ y elimina los = finales. Cualquiera puede leer la carga útil sin ninguna clave. La firma impide cambiarla, no leerla. Un token de cinco partes es un JWE, una forma cifrada que la herramienta reconoce pero no puede abrir.

Los claims estándar

La norma define siete nombres cortos: iss (emisor), sub (sujeto), aud (audiencia), exp (caducidad), nbf (no antes de), iat (fecha de emisión) y jti (identificador único). Las fechas son timestamps Unix en segundos.

Firmas simétricas y asimétricas

HS256 usa un mismo secreto para firmar y para verificar, con HMAC-SHA-256, y produce una firma de 32 bytes. RS256 y ES256 usan un par de claves: el servidor firma con su clave privada y cualquier servicio verifica con la clave pública, que suele publicarse como JWK. Una firma RS256 con clave de 2048 bits ocupa 256 bytes; una ES256, 64. Si la cabecera indica alg «none», el token no está firmado y la herramienta muestra una alerta, porque un servidor nunca debe aceptarlo.

Buenas prácticas

  • Da a los tokens de acceso una vida corta, de unos minutos a una hora.
  • No metas contraseñas, secretos ni datos sensibles en la carga útil: la puede leer cualquiera.
  • Verifica siempre en el servidor la firma, el algoritmo esperado, exp y aud. Decodificar en el navegador sirve para entender un token, no para fiarse de él.

Preguntas frecuentes

¿Se puede decodificar un JWT sin la clave?

Sí. La cabecera y la carga útil se leen sin ninguna clave. El secreto o la clave pública solo hacen falta para verificar la firma.

¿Por qué la firma no es válida si el secreto es correcto?

Puede que tu servidor guarde el secreto en base64: marca «El secreto está codificado en base64url». Revisa también los espacios sobrantes y el algoritmo de la cabecera.

¿Se guarda mi token?

No. El token, el secreto y la clave se quedan en la página, sin envío ni almacenamiento. Desaparecen en cuanto cierras o recargas la pestaña.