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.
Decodificar JWT
Codificar JWT
Verificar la firma JWT
Generador de claves secretas JWT
¿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 ← firmaPegue 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 |
|---|---|---|---|---|
| iss | Emisor | Cadena/URI | "https://auth.example.com" | El servidor o aplicación que emitió el token |
| sub | Asunto | cuerda | "user_abc123" | De quién se trata el token (generalmente una identificación de usuario) |
| aud | Audiencia | Cadena/matriz | "api.example.com" | ¿Qué servicios deben aceptar este token? |
| exp | Tiempo de vencimiento | Fecha numérica | 1716239022 | Marca de tiempo de Unix: el token no es válido después de este punto |
| nbf | No antes | Fecha numérica | 1716235422 | El token no debe aceptarse antes de esta marca de tiempo |
| iat | Emitido en | Fecha numérica | 1716235422 | Cuando se creó el token |
| jti | ID de JWT | cuerda | "a1b2c3d4e5" | Identificador único; utilizado para prevenir ataques de repetición |
| kid | ID de clave | cuerda | "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 |
|---|---|---|---|---|
| HS256 | HMAC | secreto compartido | — | Valor predeterminado para autenticación de servicio único |
| HS384 | HMAC | secreto compartido | — | Hash más potente para los requisitos de cumplimiento |
| HS512 | HMAC | secreto compartido | — | Fuerza máxima HMAC |
| RS256 | RSA | par de claves | PKCS#1 v1.5 | Ampliamente apoyado; uso en sistemas distribuidos |
| RS384 | RSA | par de claves | PKCS#1 v1.5 | Hash más largo para la familia RS |
| RS512 | RSA | par de claves | PKCS#1 v1.5 | Fuerza RS máxima |
| PS256 | RSA-PSS | par de claves | PSS (probabilistic) | Preferido sobre RS256 para nuevas implementaciones |
| PS384 | RSA-PSS | par de claves | PSS (probabilistic) | — |
| PS512 | RSA-PSS | par de claves | PSS (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 estado | Dentro del token (del lado del cliente) | Del lado del servidor (base de datos o caché) |
| Escalabilidad | Horizontal: sin almacenamiento de sesiones compartidas | Requiere un almacén de sesiones compartido en configuraciones de múltiples servidores |
| Revocación | No se puede revocar antes del vencimiento sin una lista de denegados | Inmediato: eliminar el registro de la sesión |
| Tamaño de la ficha | Más grande (~200–500 bytes típico) | ID de sesión pequeña (~20–40 bytes) |
| Uso entre dominios/API | Fácil: encabezado portador estándar | Requiere configuración para compartir cookies |
| Microservicios | Ideal: cada servicio se verifica localmente | Cada servicio debe consultar el almacén de sesiones. |
| Datos sensibles en token | No cifrado de forma predeterminada (use JWE) | Nunca expuesto al cliente. |
| Lo mejor para | API, microservicios, aplicaciones móviles, SSO | Aplicaciones 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