§

Pega tu JWT

Tanto el análisis como la verificación de firma se ejecutan localmente. Ninguna información del token se envía a un servidor.
§

Cabecera

json
§

Carga útil

json
§

Verificar firma

Introduce un secreto para verificar la firma.

En España los JWT son la moneda de cambio de las APIs PSD2 expuestas por los bancos comerciales: BBVA Open Platform, Santander Open Banking, CaixaBank PSD2 y Bankinter publican endpoints JWKS sobre el perfil FAPI que requieren validar tokens firmados antes de mover saldos. También aparecen en los `id_token` que emite el broker de Cl@ve cuando una administración federa identidad, en los webhooks de Bizum, en las APIs internas de Telefónica Tech para mensajería SMS empresarial y en cualquier microservicio desplegado por Indra o NTT Data sobre Spring Boot detrás de Keycloak. Esta herramienta decodifica cabecera y payload localmente, comprueba la firma HS256/384/512 y nunca envía el token a un servidor externo.

¿Qué es un JSON Web Token?

Un JSON Web Token (JWT) es un envoltorio compacto y seguro para URL que contiene una pequeña carga útil de claims. Es el formato de credencial estándar para sesiones web sin estado, tokens ID de OAuth/OIDC, autenticación de API entre máquinas y enlaces mágicos firmados. Un JWT siempre consta de tres segmentos base64url unidos por puntos: header.payload.signature. La cabecera y la carga útil son JSON; la firma es un MAC binario o una firma digital sobre los dos primeros segmentos.

¿Cómo funcionan los JWT?

Cuando esta herramienta decodifica un token, sigue exactamente los mismos tres pasos que cualquier biblioteca JWT:

  1. Dividir el token por los puntos en exactamente tres segmentos no vacíos. Cualquier otra forma está malformada.
  2. Decodificar en base64url los segmentos 0 y 1, y luego ejecutar JSON.parse en cada uno. La cabecera contiene el algoritmo (alg) y el tipo de token (typ). La carga útil contiene los claims (sub, exp, iat, claves personalizadas).
  3. Si se proporciona un secreto, recalcular el MAC sobre <segment0>.<segment1> utilizando el algoritmo indicado en la cabecera. Comparar los bytes con el tercer segmento.
  4. Mostrar el resultado de la verificación junto con los claims decodificados, incluido un indicador legible de caducidad calculado a partir del claim exp.

¿Por qué decodificar JWT en el navegador?

Pegar un JWT real y en uso en un depurador remoto filtra la credencial a los registros de ese servicio, a su stack de observabilidad y a cualquier socio al que el servicio envíe datos. Aunque el sitio de terceros afirme no registrar los tokens, no tienes forma de verificarlo. Esta herramienta se construyó para que nunca tengas que aceptar ese compromiso:

  • Cero red: el runtime no contiene llamadas a fetch, XMLHttpRequest ni sendBeacon. Abre las DevTools mientras decodificas y verificas — el panel de Red permanece en silencio.
  • Web Crypto nativo: la verificación HMAC utiliza crypto.subtle.importKey y crypto.subtle.sign, las mismas primitivas que tu runtime llamaría.
  • Despliegue estático: cada página es un único archivo HTML estático sin endpoint de servidor que comprometer. No hay token que filtrar porque no hay servidor al que filtrarlo.

¿Qué verifica esta herramienta y qué no?

La versión 1 de esta herramienta verifica únicamente firmas de la familia HMAC-SHA. En concreto:

  • Compatibles: HS256, HS384, HS512. Proporciona el secreto compartido y la herramienta recalculará y comparará el MAC.
  • Aún no compatibles: RS256/384/512 (RSA), ES256/384/512 (ECDSA), EdDSA y PS256/384/512 (RSA-PSS). Estos requieren una clave pública en formato PEM o JWK y se han pospuesto deliberadamente para una versión posterior.
  • Rechazado: alg: "none". La herramienta decodifica el token pero lo marca explícitamente como inseguro — no se está realizando ninguna validación de firma, y cualquier sistema de producción que acepte un token así tiene una vulnerabilidad grave.

¿Cómo es un ejemplo de decodificación de JWT?

Pega el token de ejemplo canónico de la RFC 7519 en el campo de entrada de arriba:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

La cabecera se decodifica como {"alg":"HS256","typ":"JWT"} y la carga útil como {"sub":"1234567890","name":"John Doe","iat":1516239022}. Introduce your-256-bit-secret en el panel de verificación y la comprobación de firma devolverá válida. Cambia un solo carácter del secreto y devolverá inválida. Nada de esto sale de tu navegador.

Este es el decodificador de JWT que habríamos querido tener cuando necesitábamos depurar un token en producción: respetuoso con la privacidad, rápido y construido sobre las mismas primitivas que usa el runtime.