Decodificador JWT gratuito

Decodifica e inspecciona JSON Web Tokens · cabecera, payload, claims y caducidad.

Cabecera


      

Payload


      

Firma


      

Acerca de los JWT

Los JSON Web Tokens (JWT) son una forma compacta de representar claims entre dos partes. Constan de tres partes: una cabecera (algoritmo y tipo), un payload (claims como emisor, caducidad y sujeto) y una firma. Esta herramienta decodifica la cabecera y el payload, pero no verifica las firmas · para ello necesitas el secreto de firma o la clave pública. Toda la decodificación se realiza en tu navegador; tu token nunca se envía a ningún sitio.

Una breve historia de los JSON Web Tokens

El JSON Web Token (JWT) fue estandarizado como RFC 7519 en mayo de 2015 por Michael B. Jones (Microsoft), John Bradley (Ping Identity) y Nat Sakimura (NRI) bajo el Grupo de Trabajo JOSE del IETF. Fue la culminación de media década de trabajo: el primer borrador internet de JWT apareció en diciembre de 2010, surgiendo del pesado formato de aserciones basado en XML de SAML 2.0 (2005) y de la necesidad sentida de algo más ligero que los navegadores pudieran analizar de forma nativa. El gran avance fue elegir JSON sobre XML y base64url sobre PEM: un JWT podía caber en una cadena de consulta URL o en un encabezado Authorization: Bearer. Toda la familia JOSE se entregó como un conjunto coordinado: RFC 7515 (JWS) para firma, RFC 7516 (JWE) para cifrado, RFC 7517 (JWK) para el formato de clave, RFC 7518 (JWA) para identificadores de algoritmo y RFC 7519 (JWT) para la capa de afirmaciones, todos el mismo día de mayo de 2015. La adopción fue instantánea. OAuth 2.0 (RFC 6749, 2012) había estandarizado los tokens de acceso pero dejó su formato opaco; la industria eligió JWT. OpenID Connect (diciembre de 2014, OpenID Foundation) hizo que JWT fuera obligatorio para los tokens ID. Para 2017, todos los principales proveedores de identidad (Auth0, Okta, Azure AD, AWS Cognito, Google Identity, Firebase Auth) emitían JWT como su formato de sesión nativo. JWT.io, el sitio web decodificador que Auth0 lanzó en 2014, se convirtió en la herramienta de facto para depurar JWT y ayudó a cimentar la cuota mental del formato entre desarrolladores. Dos incidentes de seguridad dieron forma al modelo de amenazas moderno: la divulgación de Tim McLean en 2015 del bypass alg: none y el ataque de confusión de algoritmo HS/RS, y CVE-2022-21449 (abril de 2022), el bug «Psychic Signatures» de Neil Madden en el verificador ECDSA de Java 15-18. Ambos llevaron al endurecimiento por defecto de las bibliotecas: la mayoría de las bibliotecas modernas ahora rechazan alg: none de plano y fijan el algoritmo esperado en lugar de leerlo del encabezado del token.

La anatomía de un JWT

Dónde se usan los JWT en la práctica

Estándares e hitos de seguridad

Preguntas frecuentes adicionales

¿Por qué esta herramienta no verifica la firma?

La verificación necesita un secreto (HMAC) o clave pública (RSA / ECDSA / EdDSA). Pegar un secreto HMAC de producción en cualquier sitio web es en sí mismo una fuga de credenciales, incluso en una herramienta que jura no transmitir nada. La verificación pertenece a un servidor que controlas. El trabajo del decodificador es hacer que el contenido sea legible para que puedas ver qué debería estar comprobando tu verificador.

¿Es seguro pegar tokens reales de producción aquí?

La decodificación sucede enteramente en tu navegador. El token no se envía por la red, ni se escribe en ningún registro, ni se almacena en ninguna parte. Dicho esto, un JWT a menudo es una credencial: quienquiera que tenga un token de acceso no expirado puede actuar como el usuario. La convención de la comunidad es «trata un JWT de producción como una cookie de sesión»: prefiere tokens de prueba cuando puedas, y rota cualquier token real que hayas compartido fuera de la sesión del navegador que lo emitió.

¿Dónde debo almacenar un JWT en el navegador?

Los dos patrones comunes tienen cada uno un compromiso. localStorage es conveniente pero legible por cualquier ataque XSS exitoso en la página. Cookies con HttpOnly son invisibles para JavaScript así que XSS no puede leerlas, pero necesitan SameSite=Strict o SameSite=Lax para evitar CSRF. La mejor práctica actual: tokens de acceso de corta duración en una variable JavaScript (solo memoria) más un token de refresco de larga duración en una cookie HttpOnly + Secure + SameSite=Strict con alcance al punto final de refresco, rotada en cada uso.

¿Qué hace el campo kid en el encabezado?

Identifica qué clave firmó el token. Los proveedores de identidad modernos publican sus claves públicas en un punto final /.well-known/jwks.json como un JWK Set (RFC 7517); el verificador busca la clave cuyo kid coincida con el encabezado del token. Esto es lo que hace posible la rotación de claves sin tiempo de inactividad: ambas claves vieja y nueva pueden coexistir en el JWKS durante el período de gracia.

¿Puedo revocar un JWT una vez emitido?

No de forma nativa. Un JWT firmado es válido hasta su afirmación exp; esa apatridia es la propiedad estrella del formato. Soluciones alternativas: mantener tokens de acceso cortos (5-15 minutos) emparejados con un token de refresco revocable; mantener una lista de denegación del lado del servidor de valores jti revocados; rotar la clave de firma (lo que invalida cada token pendiente firmado con ella). Cada opción reintroduce algo de estado; ese es el trato.

¿Es decodificar un token lo mismo que descifrarlo?

No. Decodificar invierte base64url de vuelta a JSON: cualquiera puede hacerlo, y ese es el punto. Descifrar requiere una clave y solo se aplica a JSON Web Encryption (JWE, RFC 7516), que es la variante cifrada de la familia JOSE. La mayoría de los tokens que ves en la naturaleza son JWS (firmados pero no cifrados), así que decodificarlos es suficiente para leerlos.

Herramientas relacionadas