100 % local: tus datos nunca salen de tu navegador

JWT a JSON — lee los claims de dentro

Decodifica la cabecera y el payload de un JWT, sin comprobar la firma. Lees exp, iss y los scopes, que suelen explicar por qué rechazan un token.

Instantáneo Privado Cero cookies
Indentación

Entrada JWT

Salida JSON

Qué hace esta herramienta

Entra un token, salen su cabecera y su carga en JSON.

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIn0.SflKxwRJSMeKKF2QT4fwpM
{
  "header": {
    "alg": "HS256",
    "typ": "JWT"
  },
  "payload": {
    "sub": "1234567890"
  }
}

Los dos segmentos van en Base64URL, que es una codificación y no un cifrado: cualquiera que tenga el token puede leerlos, aquí o con tres líneas de código. La firma no se muestra en ningún sitio porque no hay nada que leer en ella: es una prueba, y probar exige una clave.

Descodificar no es verificar

La carga de arriba dice que el sujeto es 1234567890. Que lo diga no prueba nada: cambia el texto, vuelve a codificarlo, y tendrás un token que se descodifica igual de limpio y que falla la verificación. Esta página no puede notar la diferencia, y ningún descodificador puede: para eso está la firma.

Así que: un descodificador sirve para ver lo que un token pretende; tu servidor y tu clave sirven para decidir si creerlo. Si alguna vez se contradicen, la razón la tiene la firma.

Tres segmentos, y solo tres

Not a JWT: expected header.payload.signature, found 2 segments

Un JWT compacto tiene exactamente tres. Dos o cuatro se descodificaban de todos modos: un token cortado por un copiar y pegar volvía con aspecto impecable —un defecto encontrado al escribir esta página y corregido—. Cinco segmentos son otro formato: un JWE, cuya carga está cifrada en vez de codificada, y el mensaje lo dice en lugar de fallar en la descodificación.

Leer la carga

  • Los identificadores numéricos largos sobreviven. Un sub de veinte cifras pasa cifra por cifra, en vez de quedar redondeado a un vecino por un número de JavaScript.
  • exp, iat y nbf son timestamps Unix. En segundos, no en milisegundos, como manda la especificación. La herramienta de timestamps de este sitio los convierte en fechas.
  • Las reclamaciones son lo que el emisor puso ahí. alg, typ, sub, iss y aud están normalizadas; el resto es un acuerdo entre tus dos extremos.

Privado por diseño

Todo se ejecuta localmente en tu navegador con JavaScript. Tus datos nunca se suben a un servidor, lo que hace que la herramienta sea segura para contenido sensible y funcione sin conexión.

Preguntas frecuentes

¿Se comprueba la firma?
No, y ninguna herramienta de navegador puede: verificar exige el secreto o la clave pública, justo lo que no hay que pegar en ninguna parte. Descodificar te dice lo que el token afirma; verificar te dice si hay que creerlo. La carga que ves aquí ha podido escribirla cualquiera: Base64URL es una codificación, no una protección. Verifica en el servidor, con tu clave.
¿Mi token se envía a algún sitio?
No. La descodificación ocurre en tu navegador y nada sale de la página —conviene saberlo, porque un token de producción pegado en un descodificador en línea es una credencial entregada a un desconocido—. Aun así, usa un token caducado o de prueba cuando puedas: esta página no puede prometer nada sobre la máquina en la que escribes.
¿Por qué se rechaza mi token?
Porque no tiene tres segmentos. Un JWT en forma compacta es `header.payload.signature`, y dos o cuatro segmentos se descodificaban igualmente: un token cortado por un copiar y pegar volvía con aspecto sano. Cinco segmentos son un JWE: su carga está cifrada, no solo codificada, y nadie la lee sin la clave. El mensaje ahora dice en qué caso estás.

Convertidores relacionados