ToolActToolAct

Generador JWT

Crear JSON Web Token con Header y Payload personalizados

HEADERConfiguración de Encabezado JWT
SECRETSecreto de Firma
PAYLOADConfiguración de Carga JWT
Añadir Rápido:
JWT Token Generado
Haz clic en el botón de arriba para generar un JWT Token

¿Qué es JWT?

El generador JWT crea JSON Web Tokens a partir de un header, un payload y ajustes de firma. Un JWT tiene tres partes codificadas en Base64URL y se usa a menudo para transportar claims como ID de usuario, roles, expiración, emisor y audiencia entre servicios. La herramienta sirve para pruebas de API, desarrollo local, aprendizaje, depuración y creación rápida de tokens de ejemplo. Un token generado solo es confiable si la gestión de claves, el algoritmo, la expiración y la validación del servidor son correctos. No conviene pegar secretos en ejemplos públicos, algoritmos débiles o vidas demasiado largas son riesgosos, y datos sensibles no deberían ir en un payload sin cifrar.

Cómo usar

Flujo de generación de JWT

  1. Selecciona el algoritmo de firma (predeterminado HS256)
  2. Introdúcelo o haz clic en Generate para crear un secreto de firma
  3. Edita el JSON del Payload y usa los botones rápidos para añadir claims estándar
  4. Establece el tiempo de emisión (iat) y expiración (exp)
  5. Haz clic en el botón Generate JWT Token
  6. Copia el Token generado para pruebas o desarrollo

Seguridad del Token

  • Usa secretos fuertes para algoritmos HMAC y protege las claves privadas para algoritmos RSA/ECDSA.
  • Establece claims realistas de exp, iat, issuer y audience; un JWT sintácticamente válido aún puede ser inseguro o rechazado por tu servicio.

Casos de uso

Crear tokens de prueba de corta duración para servicios localesElige HS256, HS384 o HS512, establece el secreto compartido (se recomiendan 32+ bytes según RFC 7518), ajusta el preset de expiración a 1 hora / 24 horas / 7 días / 30 días y genera un JWT completo para una API de desarrollo o prueba de middleware. El header, payload, firma y token final se muestran por separado para que cada parte pueda copiarse donde se necesite. La clave HMAC nunca sale de la pestaña del navegador.
Modelar combinaciones de claims para flujos de autenticaciónEl editor de payload y los botones rápidos de claims facilitan añadir valores de subject (sub), issuer (iss), audience (aud), JWT ID (jti), issued-at (iat) y expiration (exp) sin memorizar marcas de tiempo Unix. Los campos de fecha permanecen vinculados a iat y exp, lo que resulta útil al reproducir casos límite de desfase de reloj, ventanas de nbf y flujos de rotación de refresh tokens.
Generar tokens de demostración aislados sin backendPara documentación, prototipos de frontend o scripts de QA que solo necesitan un token de ejemplo firmado con HMAC, esta herramienta puede crear un secreto alfanumérico aleatorio y firmar todo localmente mediante Web Crypto. Está centrada intencionalmente en algoritmos simétricos en lugar de firma con clave privada en producción: el secreto de firma permanece dentro de la pestaña local y nunca alcanza un endpoint de red.
Reproducir el comportamiento de algorithm none y tokens sin firmarCambia el selector de algoritmo a 'none' para producir un JWT sin firmar destinado a clientes que lo acepten explícitamente. El header refleja alg y typ por separado, así puedes ver cómo reacciona una biblioteca downstream ante una firma ausente o un algoritmo inesperado antes de enviar el token a un endpoint real.
Exportar header y payload como JSON independienteCopia solo el header o solo el payload en una solicitud curl, variable de entorno de Postman o fixture de prueba. Mantener esas partes separadas evita firmar un token nuevo cada vez que quieres ajustar un solo claim durante la experimentación con la API, lo que resulta especialmente práctico al iterar sobre campos de scope, rol o tenant en un ciclo de feedback cerrado.

Principio técnico

El generador y el parser de JWT son procesos inversos: el parser separa las tres partes y el generador las arma. El núcleo es calcular el segmento de Signature. Flujo de armado: 1) Construye el Header JSON, p. ej. {"alg":"HS256","typ":"JWT"}; 2) Construye el Payload JSON con claims estándar y privados; 3) Codifica Header y Payload por separado en Base64URL para obtener h_b64 y p_b64; 4) Une h_b64 y p_b64 con un punto para formar input = h_b64 + '.' + p_b64; 5) Calcula la firma según alg: HMAC-SHA256/384/512(secret, input); 6) Codifica el resultado de la firma en Base64URL; 7) El token final es input + '.' + sig_b64. Firma HMAC-SHA256: usa el secreto como clave (>= 32 bytes) y ejecuta HMAC sobre input. Internamente HMAC corre dos rondas de SHA-256: primero deriva claves ipad/opad del secreto y luego calcula SHA256(secret XOR ipad || msg) XOR opad. Fuerza de clave: la longitud del secreto determina la seguridad. RFC 7518 exige claves HS256 >= 256 bits (32 bytes). En producción usa siempre un RNG criptográficamente seguro (p. ej. crypto.randomBytes); nunca uses cadenas como 'secret', 'password' o '123456'. Errores comunes: 1) Ataque de sustitución de alg: el servidor debe validar alg estrictamente y no debe tomar alg del header del token para despachar al algoritmo correspondiente; 2) Claves débiles: un secreto corto se rompe por fuerza bruta; 3) Manipulación del payload: HMAC garantiza integridad — si un atacante cambia el payload, la verificación falla; 4) Filtración del token: los JWT no son revocables, así que una vez fuera solo queda esperar el exp. Alcance de esta herramienta: solo se generan HS256/HS384/HS512. Algoritmos asimétricos como RS256 (RSA) y ES256 (ECDSA) requieren una clave privada en el emisor y los produce un servicio de firma en el backend o un SDK específico, no esta página.

  • Núcleo de firma HMAC-SHA256: HMAC(secret, header_b64 + '.' + payload_b64), produce una firma de 256 bits y la codifica en Base64URL.
  • La longitud de la clave HS256 debe ser >= 32 bytes (256 bits); se recomienda generar con crypto.getRandomValues o crypto.randomBytes: las claves cortas son vulnerables a ataques de diccionario.
  • Esta herramienta solo genera tokens con firma HMAC (HS256/HS384/HS512). Algoritmos asimétricos como RS256 o ES256 requieren que el emisor custodie una clave privada y no se producen aquí; usa un servicio de firma en el backend o un SDK específico para esos casos.
  • iat/exp/nbf son marcas de tiempo Unix en segundos (no milisegundos); los servidores normalmente requieren exp > ahora(), nbf <= ahora() e iat <= ahora().
  • Ataque alg=none: mantener una lista blanca de algoritmos permitidos en el lado del servidor (p. ej. ['HS256']); nunca elegir el algoritmo dinámicamente desde el header del token. Muchas librerías JWT históricamente permitían alg=none por defecto: esa es una vulnerabilidad conocida.
  • Un JWT no se puede revocar una vez emitido: el único recurso es esperar a exp. Para revocación activa, mantener una lista negra de jti o usar un token de acceso de corta duración más un token de actualización.

Ejemplos

Ejemplo básico HS256

Header:  {"alg":"HS256","typ":"JWT"}
Payload: {"sub":"user-123","name":"Alice","role":"admin","iat":1705312800,"exp":1705399200}
Secret:  my-super-secret-key-32-bytes-long

Token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJ1c2VyLTEyMyIsIm5hbWUiOiJBbGljZSIsInJvbGUiOiJhZG1pbiIsImlhdCI6MTcwNTMxMjgwMCwiZXhwIjoxNzA1Mzk5MjAwfQ.7Hk2L9oP3qR1mN4vK8xJ2wE5yT6sB0fA9cZ1dG3hI4U

Vencimiento personalizado con iat y exp

Header:  {"alg":"HS256","typ":"JWT"}
Payload: {"iss":"https://auth.example.com","sub":"user-456","aud":"api.example.com","iat":1705312800,"exp":1705316400}
Secret:  another-strong-secret-32-bytes-long

La página codifica el header y el payload en Base64URL, los une con un punto y aplica HMAC-SHA256 con el secreto compartido. El campo Token muestra la cadena final de tres segmentos lista para pegar en cabeceras Authorization.

Claims personalizados

Header: {"alg":"HS256","typ":"JWT"}
Payload: {
  "sub": "user-789",
  "name": "Bob",
  "role": "editor",
  "tenant": "acme-corp",
  "permissions": ["read:docs", "write:docs"],
  "scope": "docs.read docs.write",
  "iat": 1705312800,
  "exp": 1705399200,
  "jti": "550e8400-e29b-41d4-a716-446655440000"
}

Preguntas frecuentes

¿El JWT se genera localmente?

Sí. La cabecera, el payload y la firma se calculan en tu navegador usando la Web Crypto API. El secreto de firma o la clave privada nunca salen de la página. Trata el token en sí como datos que pueden registrarse o exponerse, sobre todo si lo pegas en un servicio real.

¿Qué algoritmos de firma se admiten?

Esta herramienta genera HS256, HS384 y HS512 (HMAC con secreto compartido). Los algoritmos asimétricos como RS256/RS384/RS512 (RSA) y ES256/ES384/ES512 (ECDSA) no se producen aquí; usa un servicio de firma en el backend o un SDK específico si tu validador los exige. Evita alg=none en producción: cualquier validador sensato rechaza tokens sin firmar.

¿Qué va en el payload?

Reclamos estándar como sub, iss, aud, exp, iat, nbf más cualquier reclamo personalizado que use tu servicio. Mantén el payload pequeño: los JWT viajan en cabeceras y crecen en cada petición. Nunca pongas contraseñas, números completos de tarjeta de crédito ni otros secretos dentro; el payload está en Base64URL, no cifrado.

¿Cómo establezco el tiempo de expiración?

Establece exp como la marca de tiempo Unix (segundos, no milisegundos) en la que el token debe dejar de ser válido. Los tokens sin exp son técnicamente legales, pero la mayoría de los servicios de producción exigen uno. Los valores habituales son de 5 a 60 minutos para tokens de acceso y de 7 a 30 días para tokens de refresco.

¿Por qué falla la verificación de mi JWT generado?

Causas habituales: el alg de la cabecera no coincide con el que espera el verificador; el secreto/clave es distinto; los reclamos del payload (iss, aud) no coinciden con la configuración del servidor; la diferencia de reloj entre emisor y verificador supera el margen permitido (típicamente ±60 s); una edición manual rompió la codificación Base64URL (no añadas saltos de línea).

¿Se envía mi secreto o clave privada a un servidor?

No. La firma ocurre íntegramente en el navegador mediante Web Crypto. Dicho esto, nunca pegues una clave de firma de producción en ninguna herramienta web: prueba con una clave que no sea de producción y luego firma en tu backend real.

¿Debería usar HS256 o RS256?

HS256 necesita que ambos lados compartan un secreto, así que solo encaja cuando el mismo servicio emite y verifica el token. RS256 (o ES256) permite que el emisor guarde una clave privada mientras cada consumidor verifica con la clave pública: la elección correcta para OAuth/OIDC y cualquier arquitectura multiservicio. Esta herramienta solo genera tokens de la familia HS; para RS256/ES256, usa un servicio de firma en el backend o un SDK específico.