Codificador / decodificador JWT

Pega un token para leer su cabecera y su payload, o firma uno con tus propios claims — sin botones, sin subidas.

Opcional al decodificar (rellénalo para verificar), obligatorio para firmar.

Cómo se usa

  1. Pega un token: la cabecera y el payload aparecen al instante, sin pulsar ningún botón. Todo lo que venga del token se muestra tal y como se firmó — la entrada nunca se reescribe.
  2. Añade el secreto bajo la entrada para comprobar la firma. Dejarlo vacío significa simplemente «sin verificar»: puedes leer los claims igualmente.
  3. Cambia a Codificar, escribe tus claims como JSON, elige HS256/384/512 y un secreto, y copia el token resultante. Cambiar de modo nunca borra lo que has escrito.
  4. Los claims estándar exp / iat / nbf se muestran en tu idioma y zona horaria, con marcas de caducado y aún no válido.

Ejemplo

Token

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJ1LTEwMjQiLCJuYW1lIjoiSmFuZSBDb29wZXIiLCJyb2xlIjoiZWRpdG9yIiwiaXNzIjoiaHR0cHM6Ly9hcGkuZXhhbXBsZS5jb20iLCJpYXQiOjE3NjcyMjU2MDAsImV4cCI6MTc5ODc2MTYwMH0.jCqliF6m-TAglXcHrjuXj7kYIjjsRO7kv6_8O1yb_7Q

Cabecera y payload

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

Payload
{
  "sub": "u-1024",
  "name": "Jane Cooper",
  "role": "editor",
  "iss": "https://api.example.com",
  "iat": 1767225600,
  "exp": 1798761600
}

Firmado con el secreto «dev-secret-change-me»; escríbelo en Secreto y la línea de estado cambiará a «Firma verificada». Cambia a Codificar y pulsa Ejemplo para obtener el mismo payload: con el mismo secreto reconstruye este token exacto, carácter a carácter.

Reglas, límites y problemas conocidos

  • Solo se admiten HS256, HS384 y HS512, tanto para firmar como para verificar. Los tokens RS*, ES* y PS* se decodifican y se muestran tal cual, pero su firma nunca se comprueba — eso requiere una clave pública, así que la línea de estado lo indica en lugar de adivinar.
  • Los tokens sin firmar (alg: none) se decodifican y se marcan claramente, pero nunca se generan: pedir una firma sin secreto da un error en lugar de un token sin firmar.
  • La codificación construye la cabecera por sí misma (`{"alg": … ,"typ": "JWT"}`). Campos de cabecera como kid, jku, x5c o cty no se conservan — esta herramienta firma claims, no cadenas de certificados.
  • Tu JSON de claims se vuelve a serializar de forma compacta antes de firmar, así que la indentación y los comentarios no llegan al token. El orden de las claves sigue el de los objetos de JavaScript: las claves repetidas se colapsan en la última y las que parecen números pasan al principio.
  • Los enteros muy grandes pierden precisión — `12345678901234567890` vuelve redondeado, porque eso es lo que hacen los números de JavaScript. Nada se corrige en silencio; usa cadenas cuando los dígitos exactos importen.
  • Los claims se muestran indentados para leerlos, mientras que la firma cubre los segmentos en bruto tal y como aparecen en el token. Nada se recodifica a tus espaldas, así que un token que se verifica aquí también se verifica en tu propio código.
  • Base64url es estricto: `+`, `/` y `=` se notifican como errores en lugar de aceptarse en silencio, y los bytes que no son UTF-8 se notifican en vez de sustituirse por caracteres de reemplazo. Los espacios dentro de un token pegado se ignoran, ya que los tokens nunca los contienen.
  • Los JWE cifrados (cinco partes) no se descifran — se te indica que eso es lo que has pegado.
  • Límite de tamaño: 10.000 caracteres. No se sube, guarda, escribe en la URL ni comparte nada: el botón de compartir solo comparte la dirección de esta página, nunca tu token ni tu secreto.

Una vez leídos los claims, estos suelen ser los siguientes pasos.