DevBox Herramientas rápidas para desarrolladores, sin registro

Decodificador de JWT

Pega un JSON Web Token para ver su encabezado y payload, además de si ha caducado.

Esto solo decodifica el token — no verifica la firma. Nunca pegues un token en una herramienta que también te pida su clave secreta.

Tres segmentos, una limitación honesta

Un JWT es base64url(encabezado).base64url(payload).firma. Esta herramienta separa tu entrada por los puntos, convierte cada uno de los dos primeros segmentos de base64url de vuelta a base64 estándar (cambiando -/_ de nuevo por +// y restaurando el relleno que espera atob()), lo decodifica a texto UTF-8 y lo interpreta como JSON. El tercer segmento — la firma — se muestra tal cual está escrito, porque comprobarlo requiere la clave secreta o pública del emisor, que no tiene ningún motivo para estar escrita en una página web.

Ejemplo práctico

Token:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

Se decodifica al encabezado:

{
  "alg": "HS256",
  "typ": "JWT"
}

y al payload:

{
  "sub": "1234567890",
  "name": "John Doe",
  "iat": 1516239022
}

Este token en concreto no tiene claim exp, así que no hay nada que caduque — pega uno que sí lo tenga y la insignia sobre los campos te indica de un vistazo si sigue siendo válido.

Preguntas frecuentes

¿Esto verifica que el token es auténtico?

No — y ninguna herramienta que se ejecute en el navegador puede hacerlo honestamente. Verificar la firma de un JWT requiere la clave secreta (para HS256) o la clave pública (para RS256/ES256) que lo emitió, y esa clave debe vivir en tu servidor, nunca pegada en una página web. Esta herramienta solo decodifica el encabezado y el payload para que puedas leer lo que contienen — nunca comprueba si la firma es válida. Trata un token decodificado como "legible", no como "confiable": cualquiera puede decodificar un JWT, y cualquiera puede falsificar uno sin la clave de firma, así que la autenticidad tiene que verificarse en el servidor.

¿Cuáles son las tres partes de un JWT?

Un JWT son tres segmentos codificados en base64url unidos por puntos: encabezado.payload.firma. El encabezado indica el algoritmo de firma y el tipo de token (normalmente {"alg":"HS256","typ":"JWT"}). El payload contiene los claims — los datos reales, como un ID de usuario, un emisor y una fecha de caducidad. La firma la calcula el servidor emisor sobre el encabezado y el payload usando un secreto que solo él conoce, de modo que un servidor receptor puede confirmar que el token no fue manipulado — pero solo si también tiene ese secreto.

¿Por qué base64url es distinto del base64 normal?

El base64 normal usa +, / y = como parte de su alfabeto, y los tres son caracteres con significado especial en una URL (+ puede significar un espacio, / separa segmentos de ruta, = inicia una cadena de consulta). base64url cambia + por -, / por _, y elimina por completo el relleno con =, así que un token puede ir dentro de una URL o una cabecera HTTP sin necesitar codificación porcentual. Esta herramienta convierte base64url de vuelta a base64 estándar antes de decodificar, porque ese es el formato que espera la función atob() del navegador.

¿Se sube mi token a algún servidor?

No. Separar la cadena y decodificarla ocurre enteramente en tu navegador con JavaScript normal — nada se envía, se registra ni se guarda en ningún servidor. Aun así, los JWT a menudo llevan datos reales de sesión: no pegues un token de producción activo en ninguna herramienta, incluida esta, si no estás seguro de quién más podría ver tu pantalla.