Decodificador y codificador JWT

Los fallos de autenticación JWT son opacos. Una respuesta 401 no le dice nada: no puede ver si el token expiró, si la afirmación de la audiencia es incorrecta, qué algoritmo se utilizó o si la carga útil fue manipulada. La mayoría de las herramientas en línea solo decodifican: no pueden codificar un token nuevo, verificar una firma o generar claves, y muchas envían sus tokens a servidores externos.

Esta herramienta maneja las cuatro operaciones JWT en un solo lugar (decodificar, codificar, verificar y generar claves) con soporte total para los algoritmos HMAC (HS256, HS384, HS512), RSA y RSA-PSS. Inspeccione los reclamos de cualquier token sin una clave de firma, codifique nuevos tokens con cargas útiles personalizadas, verifique las firmas con claves secretas o públicas y genere claves aleatorias criptográficamente seguras listas para producción. Todo se ejecuta en su navegador a través de Web Crypto API: ningún token, clave o carga útil sale de su dispositivo.

100% privado: se ejecuta en tu navegador
Gratis: no se necesita cuenta
Soporta HMAC, RSA y RSA-PSS
No se requiere cuenta ni registro

Decodificar JWT

Codificar JWT

HS256

Verificar la firma JWT

Auto desde el encabezado

Generador de claves secretas JWT

Secreto de 256 bits

¿Qué es un decodificador JWT?

Un decodificador JWT, también llamado analizador, depurador o visor de JWT, es una herramienta que divide un token web JSON en tres partes: encabezado, carga útil y firma, y ​​muestra cada una como JSON legible. Un codificador JWT hace lo contrario: toma un encabezado, una carga útil y una clave de firma, y ​​produce un token compacto firmado. JSON Web Token (JWT, pronunciado "jot") es un estándar abierto definido por el IETF en RFC 7519 para transmitir reclamaciones verificadas entre dos partes como una cadena compacta y segura para URL.

Los JWT son la base de la autenticación sin estado en la arquitectura web moderna. Después de que un usuario inicia sesión, el servidor de autorización emite un JWT firmado que contiene reclamos verificados (una identificación de usuario, función, tiempo de vencimiento) y lo devuelve al cliente. El cliente adjunta ese token a cada solicitud de API posterior. El servidor verifica la firma digital sin consultar un almacén de sesiones, lo que hace que el sistema sea rápido y escalable a través de microservicios. En la mayoría de los sistemas, un token de acceso de corta duración y un token de actualización de mayor duración se emiten juntos: el token de acceso contiene los reclamos JWT, mientras que el token de actualización se usa para solicitar uno nuevo después de su vencimiento.

Los dos protocolos más comunes que dependen de JWT son OAuth 2.0 (autorización) y OpenID Connect (OIDC – identidad y autenticación). En ambos, los JWT llevan afirmaciones estandarizadas definidas en RFC 7519. Google, Microsoft, Okta y Auth0 emiten tokens de identificación OIDC como JWT.

A diferencia del paquete npm jwt-decode, que solo decodifica tokens, esta herramienta también codifica y decodifica tokens con cualquier algoritmo HMAC o RSA, verifica firmas y genera claves secretas, todo sin salir de su navegador. Las principales bibliotecas JWT en otros lenguajes incluyen PyJWT (Python), jjwt (Java), golang-jwt (Go) y jose (Rust). Utilice esta herramienta para probar los tokens generados por cualquiera de ellos.

Cómo utilizar esta herramienta

Decodificar un JWT

  • Pegue el JWT codificado que desea inspeccionar en el campo Decodificar JWT.
  • Haga clic en Decodificar JWT.
  • El encabezado y la carga útil aparecen como JSON con formato: puede ver cada reclamo que el emisor eligió codificar en el token. Verifique las reclamaciones, el algoritmo, la marca de tiempo de vencimiento, el emisor y cualquier campo personalizado; no se requiere clave de firma.

Codificar un JWT

  • Seleccione un algoritmo de firma del menú desplegable: HS256 para codificar con HMAC, RS256 o PS256 para codificar con RSA.
  • Ingrese su clave secreta (HMAC) o clave privada en formato PEM (RSA/RSA-PSS).
  • Edite el encabezado JSON para configurar alg y typ.
  • Edite el JSON de carga útil con sus reclamos: sub, iat, exp, roles o cualquier campo personalizado.
  • Haga clic en Codificar JWT para codificar y firmar su token en un solo paso.

Verificar una firma JWT

  • Pegue el token en el campo Verificar JWT.
  • Ingrese la clave secreta (HMAC) o clave pública en formato PEM (RSA/RSA-PSS). El algoritmo se lee automáticamente desde el encabezado del token.
  • Haga clic en Verificar JWT. La herramienta vuelve a ejecutar el mismo proceso utilizado para codificar la firma y compara el resultado. Válido = coincidencias de firma. No válido = clave incorrecta o carga útil manipulada.

Generar una clave secreta

  • Seleccione la longitud de la clave: 256 bits para HS256, 384 bits para HS384, 512 bits para HS512.
  • Haga clic en Generar secreto.
  • Copie y almacene la clave en una variable de entorno o administrador de secretos. Nunca incluya secretos de firma en el código fuente. Para formatos secretos adicionales, consulte nuestro Generador de contraseñas.

Cómo leer sus resultados

Encabezado decodificado

El encabezado decodificado revela la configuración elegida cuando se codificó el JWT. Es un objeto JSON con dos campos estándar: alg (el algoritmo de firma: "HS256", "RS256", "PS256", etc.) y typ (siempre "JWT"). Si está presente un campo secundario (ID de clave), identifica qué clave se usó para firmar el token; se usa cuando un servidor de autorización publica múltiples claves públicas a través de un punto final JWKS (JSON Web Key Set) y las rota con el tiempo.

Carga útil decodificada

La carga útil contiene las afirmaciones del token: datos sobre el sujeto autenticado. Los reclamos registrados estándar incluyen sub (asunto, generalmente una identificación de usuario), iss (emisor), aud (audiencia), exp (vencimiento, una marca de tiempo de Unix), iat (emitida en), nbf (no antes) y jti (ID de JWT). Las reclamaciones personalizadas que agrega su aplicación (roles, ID de organización, alcances de permisos, nivel de suscripción) también aparecen aquí.

La carga útil está codificada en Base64URL, no cifrada. Cualquiera que tenga el token puede decodificar y leer la carga útil. Nunca almacene contraseñas, detalles de pago, identificaciones nacionales o datos personales confidenciales en una carga útil de JWT. Para tokens que deben contener datos confidenciales, utilice JWE (RFC 7516) en su lugar.

Resultado de la verificación de firma

La verificación vuelve a calcular la firma que se creó cuando se codificó el token, utilizando el encabezado, la carga útil y la clave que usted proporciona, luego la compara byte por byte con la firma codificada en el token. Válido confirma que el token fue firmado por el titular de esa clave y que no se ha modificado nada. No válido significa que la clave es incorrecta o que el token fue manipulado después de firmar. La decodificación por sí sola nunca prueba la autenticidad; siempre verifique antes de actuar sobre cualquier reclamo en producción.

Estructura del token JWT

Un JWT son tres cadenas codificadas en Base64URL unidas por puntos: [encabezado].[carga útil].[firma]. Cuando codifica un JWT, cada sección está codificada en Base64URL y unida con puntos. Cuando lo decodifica, cada sección se separa y se muestra como JSON. El encabezado identifica el algoritmo. La carga útil lleva los reclamos. La firma demuestra que ninguno de los dos ha sido alterado.

[header].[payload].[signature]

Aquí hay un token JWT de muestra que muestra cómo se dividen las tres partes:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9          ← encabezado
.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ  ← carga útil
.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c  ← firma

Pegue este JWT de muestra en el decodificador de arriba para ver cada parte decodificada.

encabezado

El encabezado es un objeto JSON que codifica en JWT como Base64URL. Especifica el tipo de token ("JWT") y el algoritmo utilizado para crear la firma, por ejemplo, "HS256" (HMAC-SHA256) o "RS256" (RSASSA-PKCS1-v1_5). Algunos tokens incluyen un niño (ID de clave) para indicarle al destinatario qué clave pública usar para la verificación cuando el emisor rota las claves.

Carga útil

La carga útil es un objeto JSON que contiene las reclamaciones: codificado en Base64URL pero no cifrado. RFC 7519 define tres categorías de reclamos: reclamos registrados (nombres estandarizados como sub, iss, exp), reclamos públicos (registrados en el registro de reclamos de tokens web JSON de IANA para evitar colisiones) y reclamos privados (campos personalizados y específicos de la aplicación acordados entre el emisor y el consumidor).

Firma

La firma es la firma digital que hace que los JWT sean resistentes a manipulaciones: une el encabezado y la carga útil y demuestra que provienen de una fuente confiable. Para algoritmos HMAC, es HMACSHA256(base64url(header) + "." + base64url(payload), secret). Para RSA, una clave privada firma y cualquier poseedor de la clave pública correspondiente verifica. Cambie un solo byte en el encabezado o la carga útil después de firmar y la firma dejará de ser válida, que es la garantía de seguridad central de JWS (RFC 7515).

Reclamaciones comunes de JWT

Los reclamos registrados en JWT son nombres de campos estandarizados definidos en RFC 7519. Los más importantes son exp (tiempo de vencimiento), sub (asunto, generalmente una identificación de usuario), iss (emisor) y aud (audiencia). Todos son opcionales pero se implementan ampliamente en los sistemas OAuth 2.0 y OIDC.

Nombres de reclamos registrados RFC 7519: opcionales pero ampliamente admitidos en los sistemas OAuth 2.0 y OIDC:

Reclamar
Nombre completo
Tipo
Valor de ejemplo
Descripción
issEmisorCadena/URI"https://auth.example.com"El servidor o aplicación que emitió el token
subAsuntocuerda"user_abc123"De quién se trata el token (generalmente una identificación de usuario)
audAudienciaCadena/matriz"api.example.com"¿Qué servicios deben aceptar este token?
expTiempo de vencimientoFecha numérica1716239022Marca de tiempo de Unix: el token no es válido después de este punto
nbfNo antesFecha numérica1716235422El token no debe aceptarse antes de esta marca de tiempo
iatEmitido enFecha numérica1716235422Cuando se creó el token
jtiID de JWTcuerda"a1b2c3d4e5"Identificador único; utilizado para prevenir ataques de repetición
kidID de clavecuerda"2025-key-01"Identifica qué clave firmó el token cuando se utilizan varias claves

Los valores de NumericDate (exp, nbf, iat) son segundos desde la época de Unix: 00:00:00 UTC del 1 de enero de 1970.

Cuando codifique un JWT, agregue reclamaciones privadas para datos específicos de la aplicación: roles, nivel de suscripción, ID de organización, alcances de permisos. Utilice un nombre de estilo URI como "https://yourapp.com/role" para evitar futuras colisiones del registro de la IANA.

Algoritmos de firma admitidos

Esta herramienta admite las tres variantes de HMAC (HS256, HS384, HS512) y las seis variantes RSA/RSA-PSS (RS256, RS384, RS512, PS256, PS384, PS512), como se define en RFC 7518 (Algoritmos web JSON). Elija HMAC para configuraciones de servicio único; elija RSA para sistemas distribuidos donde los servicios verifican tokens sin compartir la clave de firma.

Algoritmo
familia
Tipo de clave
Relleno
Uso recomendado
HS256HMACsecreto compartidoValor predeterminado para autenticación de servicio único
HS384HMACsecreto compartidoHash más potente para los requisitos de cumplimiento
HS512HMACsecreto compartidoFuerza máxima HMAC
RS256RSApar de clavesPKCS#1 v1.5Ampliamente apoyado; uso en sistemas distribuidos
RS384RSApar de clavesPKCS#1 v1.5Hash más largo para la familia RS
RS512RSApar de clavesPKCS#1 v1.5Fuerza RS máxima
PS256RSA-PSSpar de clavesPSS (probabilistic)Preferido sobre RS256 para nuevas implementaciones
PS384RSA-PSSpar de clavesPSS (probabilistic)
PS512RSA-PSSpar de clavesPSS (probabilistic)

HMAC (simétrico), HS256, HS384, HS512

Los algoritmos HMAC (definidos en RFC 2104) utilizan un secreto compartido tanto para la firma como para la verificación. Tanto el emisor del token como cada servicio que verifica los tokens deben mantener el mismo secreto.

  • HS256: HMAC con SHA-256. El algoritmo de firma JWT más común en todo el ecosistema. Longitud mínima recomendada del secreto: 256 bits (32 bytes).
  • HS384: HMAC con SHA-384. Úselo cuando su política de seguridad requiera un tamaño de hash mayor.
  • HS512: HMAC con SHA-512. Máxima resistencia HMAC para entornos de alto cumplimiento.

RSA y RSA-PSS (asimétrico): RS256, RS384, RS512, PS256, PS384, PS512

Los algoritmos RSA utilizan un par de claves. La clave privada firma; la clave pública verifica. Los servicios de verificación solo necesitan la clave pública, que se puede publicar abiertamente a través de un punto final JWKS.

  • RS256 / RS384 / RS512: Relleno RSASSA-PKCS1-v1_5. Ampliamente compatible con todas las bibliotecas y plataformas JWT.
  • PS256 / PS384 / PS512: Acolchado RSASSA-PSS. Esquema de firma probabilístico con propiedades de seguridad más sólidas que PKCS#1 v1.5. Recomendado sobre variantes RS para nuevas implementaciones (consulte RFC 8017).

Tamaño mínimo de clave RSA: 2048 bits; prefiera 4096 bits para claves de firma de larga duración. Utilice HMAC cuando un servicio emita y verifique tokens. Utilice RSA o RSA-PSS cuando los servicios independientes necesiten verificar tokens sin compartir el secreto de firma.

Vulnerabilidades de seguridad de JWT

JWT es seguro cuando se implementa correctamente. Tres vulnerabilidades aparecen constantemente en las auditorías de seguridad de API: la omisión de alg:none, confusión de algoritmos y secretos HMAC débiles. Todo se debe a errores de implementación, no a fallas en RFC 7519. RFC 8725 (JWT Best Current Practices, IETF) proporciona la guía de mitigación autorizada.

El ataque alg:none

Un atacante modifica el encabezado del token para establecer "alg": "none" y luego elimina el segmento de firma. Si el servidor acepta el campo alg del encabezado del token sin validación, omite por completo la verificación de la firma y confía en el token sin firmar.

Incluya siempre en la lista blanca los algoritmos aceptados del lado del servidor. Nunca permita que el encabezado del token determine qué algoritmo usar cuando codifica o verifica; derívelo de su propia configuración. Cada biblioteca JWT importante tiene un parámetro de algoritmos explícito: páselo. Ejemplo: jwt.verify(token, secret, {'{'} algorithms: ['HS256'] {'}'})

Confusión de algoritmos (RS256 a HS256)

Si un servidor usa una clave pública RSA para verificar tokens pero no aplica alg, un atacante puede cambiar el encabezado a "alg": "HS256" y firmar el token usando la clave pública como secreto HMAC. Luego, el servidor trata la clave pública como un secreto HMAC compartido y acepta el token falsificado.

Aplique el algoritmo esperado en el lado del servidor. Nunca utilice el mismo material clave para múltiples familias de algoritmos. Configure explícitamente su biblioteca para aceptar solo RS256 o PS256 cuando use claves RSA.

Secretos débiles de HMAC

Los tokens HS256 firmados con secretos breves o adivinables pueden ser forzados fuera de línea. Un atacante que intercepta un token válido puede ejecutar ataques de diccionario o de tabla de arcoíris contra la firma sin ninguna interacción con el servidor. Los secretos débiles comunes incluyen "secreto", "contraseña" o nombres de aplicaciones.

Utilice el generador de secretos integrado en esta página para producir una clave criptográficamente aleatoria de 256 bits (o más). Rote el secreto inmediatamente ante cualquier sospecha de exposición.

Falta validación de reclamo

Una firma válida demuestra que el token fue emitido por una parte conocida; no prueba que el token sea apropiado para la solicitud actual. No validar exp (vencimiento), aud (audiencia) o iss (emisor) permite a los atacantes reproducir tokens caducados, usar tokens emitidos para un servicio diferente o usar tokens de un emisor que no es de confianza.

Valide siempre exp para rechazar tokens caducados. Valide aud para asegurarse de que el token se haya emitido para su servicio específico. Valide iss para rechazar tokens de emisores inesperados. La mayoría de las bibliotecas JWT manejan estas comprobaciones automáticamente si pasa los valores esperados en las opciones de verificación.

JWT frente a autenticación basada en sesiones

Los JWT no tienen estado: todos los datos de la sesión están codificados en el token. La autenticación basada en sesiones almacena los datos de la sesión en el lado del servidor y le proporciona al cliente solo una ID de sesión. Los JWT escalan mejor horizontalmente; Las sesiones admiten la revocación instantánea.

Característica
JWT (Apátrida)
Basado en sesión (con estado)
Donde se almacena el estadoDentro del token (del lado del cliente)Del lado del servidor (base de datos o caché)
EscalabilidadHorizontal: sin almacenamiento de sesiones compartidasRequiere un almacén de sesiones compartido en configuraciones de múltiples servidores
RevocaciónNo se puede revocar antes del vencimiento sin una lista de denegadosInmediato: eliminar el registro de la sesión
Tamaño de la fichaMás grande (~200–500 bytes típico)ID de sesión pequeña (~20–40 bytes)
Uso entre dominios/APIFácil: encabezado portador estándarRequiere configuración para compartir cookies
MicroserviciosIdeal: cada servicio se verifica localmenteCada servicio debe consultar el almacén de sesiones.
Datos sensibles en tokenNo cifrado de forma predeterminada (use JWE)Nunca expuesto al cliente.
Lo mejor paraAPI, microservicios, aplicaciones móviles, SSOAplicaciones web tradicionales renderizadas en servidor

Elija JWT para API distribuidas, microservicios, aplicaciones móviles, inicio de sesión único (SSO) y cualquier arquitectura en la que varios servicios independientes necesiten verificar tokens sin compartir un almacén de sesiones.

Elija sesiones para aplicaciones que requieran una revocación inmediata de tokens (sistemas financieros, herramientas de administración), aplicaciones web tradicionales renderizadas por servidor o sistemas donde el tamaño del token es una restricción.

Privacidad y seguridad

  • Se ejecuta completamente en su navegador.Toda la codificación, decodificación, verificación y generación de claves se realizan en el lado del cliente a través de Web Crypto API y JavaScript. Ya sea que codifique un token nuevo o decodifique uno existente, no se envían datos a ningún servidor. Como todas las herramientas en nuestro Kit de herramientas de seguridad , esta herramienta está completamente del lado del cliente.
  • No se almacena ni registra nada.No se mantiene ningún registro de ningún token, secreto o carga útil que ingrese.
  • Codificado no está cifrado.Las cargas útiles JWT (JWS) están codificadas en Base64URL y pueden ser leídas por cualquier persona que tenga el token. La firma digital hace que la carga útil sea a prueba de manipulaciones pero no privada. Para los tokens que deben transportar datos confidenciales, utilice JWE (JSON Web Encryption, RFC 7516) en su lugar. Esta herramienta solo maneja JWS.
  • La decodificación no es autenticación.Leer el contenido de un token no prueba que el token sea válido o confiable. Verifique siempre la firma (y valide exp, aud e iss) antes de actuar sobre cualquier reclamo en producción.
  • Trate las claves de firma como contraseñas.Utilice el generador aquí para obtener una clave criptográficamente aleatoria con la longitud correcta. Guárdelo en una variable de entorno o en un administrador de secretos dedicado. Gírelo si sospecha que está expuesto. Nunca lo comprometas con el control de versiones.

Preguntas frecuentes

Preguntas frecuentes