Saltar al contenido principal

JWT Decoder

Lee el encabezado y el payload de un JWT sin enviarlo.

Entrada JWT

Lín 1, Col 1
JWT

Resultado

Tu resultado aparecerá aquí

Añade JWT arriba y elige Decodificar.

Añade JWT a la izquierda y elige Decodificar.

Esperando entrada

2 espacios

Decodifica un JWT en tu navegador para leer el encabezado y el payload, ver las fechas exp, iat y nbf y saber si ha expirado. No verifica la firma.

¿Qué es JWT Decoder?

JWT Decoder es una herramienta en línea gratuita que decodifica un JSON Web Token en tu navegador y muestra su encabezado y su payload como JSON formateado, con las horas de exp, iat y nbf como fechas y un aviso cuando el token ha caducado o aún no es válido. No verifica la firma.

El token se decodifica en tu dispositivo y no se envía a ningún sitio. Aun así, prefiere un token de un entorno de pruebas: los Términos de Uso piden que no pegues secretos, como tokens de acceso.

Qué admite

  • Un JWT firmado en su forma compacta: tres partes Base64URL separadas por puntos, como describe la RFC 7519. Los espacios y los saltos de línea alrededor del token se ignoran, y también una palabra Bearer delante de él, con cualquier combinación de mayúsculas y minúsculas, como en una cabecera Authorization.
  • El encabezado y el payload se decodifican de Base64URL y UTF-8 y se escriben como un único objeto JSON, {"header": …, "payload": …}, con la sangría que elijas. Todo valor, incluidos los números grandes, se copia tal como está escrito en el token.
  • De la firma solo se comprueba el alfabeto (letras, dígitos, - y _), no se muestra y puede estar vacía.
  • Las claims exp, iat y nbf se muestran como fechas ISO 8601 en UTC, como 2023-11-14T23:13:20Z, cuando son números de segundos desde el 1 de enero de 1970.
  • Avisos: el token ha caducado cuando exp es ahora o anterior, y aún no es válido cuando nbf está en el futuro. Ambos se comparan con el reloj de tu dispositivo. Una claim que no es una hora válida también genera un aviso, y lo mismo ocurre con una que parece estar en milisegundos, un número superior a 100.000.000.000: no se convierte en fecha, porque una fecha en el año 5138 o posterior es casi seguro un error.
  • Las demás claims, como sub, iss, aud o roles, se muestran tal cual. La herramienta no las interpreta.

Conviene saber

  • La firma no se verifica. Decodificar muestra lo que dice el token, no que sea auténtico: cualquiera puede escribir un token con las claims que quiera. Solo el programa que tiene la clave puede verificarlo.
  • Un token no está cifrado. El encabezado y el payload solo están codificados, así que cualquiera que tenga el token puede leerlos. No pongas secretos en un payload.
  • Prefiere un token de un entorno de pruebas. El token se queda en tu navegador, pero un token de acceso real es un secreto, y los Términos de Uso piden que no pegues secretos.
  • Solo se lee la forma compacta, de tres partes. Se rechaza un token cifrado (JWE, con cinco partes), y lo mismo ocurre con un payload que no es un objeto JSON.
  • Las fechas y los avisos dependen del reloj de tu dispositivo. Si ese reloj está mal, ellos también lo estarán.
  • Un token cortado, o una parte que no es Base64URL ni JSON válido, se rechaza con un mensaje que dice cuál es la parte (encabezado, payload o firma) e indica su posición. No se repara nada.

¿Cómo se usa JWT Decoder?

  1. Pega tu JWT en el cuadro de entrada. Tiene tres partes separadas por puntos, como en encabezado.payload.firma. Un Bearer delante, como en una cabecera Authorization copiada, se ignora. No se ejecuta nada mientras escribes.
  2. Elige la sangría («2 espacios» o «4 espacios») y pulsa «Decodificar».
  3. Lee el encabezado y el payload junto a tu entrada. Las claims exp, iat y nbf también se enumeran como fechas en UTC, y aparece un aviso si el token ha caducado o aún no es válido. Si no se puede decodificar el token, el mensaje dice qué parte está mal e indica su posición.
  4. Pulsa «Copiar» para poner el JSON en el portapapeles, o «Descargar» para guardarlo como converted.json.

Ejemplos

Un token que ha caducado

Pega este token y pulsa «Decodificar». El resultado es el encabezado y el payload como JSON, y la firma no se muestra. Las claims exp e iat, que son números de segundos desde el 1 de enero de 1970, también se enumeran como fechas en UTC. Como exp está en el pasado, un aviso dice que el token ha caducado. El token solo se decodifica, así que el aviso no dice si es auténtico.

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkFkYSIsImlhdCI6MTcwMDAwMDAwMCwiZXhwIjoxNzAwMDAzNjAwfQ.c2lnbmF0dXJl
{
  "header": {
    "alg": "HS256",
    "typ": "JWT"
  },
  "payload": {
    "sub": "1234567890",
    "name": "Ada",
    "iat": 1700000000,
    "exp": 1700003600
  }
}

Caduca el 2023-11-14T23:13:20Z

Emitido el 2023-11-14T22:13:20Z

Este token ha caducado: la claim exp está en el pasado. Aquí el token solo se decodifica y la firma no se verifica, así que esto no dice si es auténtico.

Un token al que le falta una parte

Un JWT tiene exactamente tres partes. Este texto tiene dos, así que la herramienta se niega. Un token con una firma vacía, como un token sin firmar, sigue necesitando los dos puntos. Un token cifrado (JWE, con cinco partes) no se puede decodificar.

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkFkYSIsImlhdCI6MTcwMDAwMDAwMCwiZXhwIjoxNzAwMDAzNjAwfQ

Un JWT tiene exactamente tres partes separadas por puntos: encabezado.payload.firma. Este texto no las tiene. Los tokens cifrados (JWE, que tienen cinco partes) no se pueden decodificar aquí.

Línea 1, columna 1

Un encabezado Authorization pegado

La palabra Bearer y el espacio no forman parte del token, así que la herramienta los ignora y decodifica el token con normalidad. Pulsa «Decodificar» con la línea entera de la cabecera.

Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiI3IiwiaWF0IjoxNjAwMDAwMDAwfQ.c2lnbmF0dXJl
{
  "header": {
    "alg": "HS256",
    "typ": "JWT"
  },
  "payload": {
    "sub": "7",
    "iat": 1600000000
  }
}

Emitido el 2020-09-13T12:26:40Z

Un token que aún no es válido

La claim nbf (not before) está muy en el futuro, así que un aviso dice que el token aún no es válido, y nbf y exp se enumeran como fechas. La herramienta las compara con el reloj de tu dispositivo en el momento en que pulsas «Decodificar».

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiI0MiIsIm5iZiI6OTk5OTk5OTk5OSwiZXhwIjoxMDAwMDAwMzU5OX0.c2lnbmF0dXJl
{
  "header": {
    "alg": "HS256",
    "typ": "JWT"
  },
  "payload": {
    "sub": "42",
    "nbf": 9999999999,
    "exp": 10000003599
  }
}

Caduca el 2286-11-20T18:46:39Z

Válido desde 2286-11-20T17:46:39Z

Este token aún no es válido: la claim nbf está en el futuro.

Límites y privacidad

Límites de tamaño

  • Entrada: hasta 2.000.000 bytes de texto en UTF-8 (unos 2 MB). Las letras acentuadas y los emojis ocupan más de un byte cada uno. Una entrada mayor se rechaza.
  • Resultado: también hasta 2.000.000 bytes. Si el resultado completo fuera mayor, la herramienta muestra solo una vista previa incompleta de los primeros 100.000 bytes, y esa vista previa no se puede copiar ni descargar.
  • Anidamiento: hasta 256 niveles de objetos y listas (en el encabezado o en el payload) dentro de otros. Un JWT más profundo se rechaza porque supera lo que procesa la herramienta.
  • Tiempo: una ejecución que tarda más que su límite de tiempo se detiene. Prueba con una entrada más pequeña.

¿Se envía mi texto a un servidor?

No. El texto que escribes o pegas, o abres desde un archivo local, se procesa localmente en tu navegador, en un Web Worker dedicado. Nunca se sube ni se envía al servidor (un archivo que abres se lee solo en tu navegador), y no se escribe en el almacenamiento, en cookies ni en la barra de direcciones.

«Copiar» pone el resultado en el portapapeles y «Descargar» lo guarda como archivo, pero solo cuando pulsas el botón. El archivo se crea en tu navegador, así que no se sube nada.

Para conocer todos los detalles, consulta la Política de privacidad

Herramientas y páginas relacionadas

Tu texto se queda en la página cuando cambias de herramienta en la misma pestaña, así que puedes probar el mismo texto en otra. Recargar o cerrar la pestaña lo termina.

Todas las herramientas