Generador de JWT

Crea un JWT real y firmado a partir de un header, payload y clave secreta en tu navegador, HS256/HS384/HS512, ayudas exp/iat/sub, sin subidas.

🌐 English

🔒 Privado por diseño: tu texto se procesa localmente en tu navegador; nada se sube nunca a ningún servidor.

Cómo generar un JWT

Pega tu entrada en la caja usando esta convención de marcadores, una sección por línea === NOMBRE ===, seguida de su propio contenido:

=== HEADER ===
{"alg":"HS256","typ":"JWT"}
=== PAYLOAD ===
{"sub":"1234567890","name":"John Doe"}
=== SECRET ===
your-256-bit-secret

El analizador tolera espacios alrededor de los marcadores y descarta cualquier cosa que escribas por encima del primero. Si el mismo marcador aparece dos veces, gana la sección posterior sin más: el analizador arranca un búfer nuevo cada vez que ve un marcador, así que el contenido anterior se descarta en lugar de concatenarse.

Firmar un token desde cero son seis pasos:

  1. Pega tus secciones en la caja usando las líneas de marcador de arriba.
  2. Elige un algoritmo de firma. HS256 (recomendado) es el valor por defecto y el que espera casi cualquier backend; HS384 y HS512 solo cambian el tamaño del resumen.
  3. Opcionalmente elige una duración en Añadir “exp” automáticamente (caduca en). Empieza en No añadir automáticamente, así que no se inventa ninguna caducidad salvo que la pidas.
  4. Deja marcado Añadir “iat” automáticamente (emitido ahora) para estampar la hora actual en el payload, o desmárcalo si quieres que el payload quede exactamente como lo escribiste.
  5. Pulsa el botón de generar. Toma su etiqueta del título de la página, igual que todas las herramientas de pegar y leer de este sitio.
  6. Copia el resultado. La salida lleva primero el token completo, y después el JSON de header y payload que realmente se firmó, en un bloque etiquetado listo para copiar.

Qué es realmente un JWT

Un JSON Web Token son tres segmentos Base64URL pegados con puntos, header.payload.signature, donde la firma es un HMAC (para HS256/HS384/HS512) calculado sobre la cadena literal base64url(header) + "." + base64url(payload), con clave un secreto compartido. Esta herramienta construye y firma exactamente esa estructura: codifica en JSON tu header y payload, codifica cada segmento en Base64URL, calcula el digest HMAC-SHA256/384/512 del resultado unido a través de la propia Web Crypto API nativa del navegador, codifica el digest en Base64URL, y une los tres segmentos con puntos en el token final.

Por qué generar un JWT de prueba

Recurrir a un backend real solo para conseguir un token firmado que pegar en una cabecera Authorization: Bearer, una petición de Postman/Insomnia, o un arnés de pruebas de webhook suele ser más configuración de la que la tarea real necesita. Razones habituales para generar uno a mano:

Corrección de la firma, verificada contra vectores de referencia reales

Un alfabeto Base64URL sutilmente incorrecto, un recorte de relleno olvidado, o una codificación de bytes equivocada del secreto producirían un token que parece plausible pero falla en cualquier verificador real. En lugar de confiar en la implementación solo por inspección, el pipeline exacto de firma de esta herramienta se comprobó contra el famoso token de ejemplo de jwt.io, comprobable de forma independiente (y más vectores de HS384/HS512/UTF-8 calculados con el propio crypto.createHmac de Node.js), ve la FAQ de abajo para el ejemplo completo resuelto.

Privado, porque tu clave secreta no debería salir de tu dispositivo

Un secreto de firma de JWT es una credencial real, cualquiera que lo tenga puede falsificar tokens en los que tu backend confiará. Esta herramienta calcula toda la firma usando la propia Web Crypto API del navegador, enteramente dentro de tu pestaña; el secreto nunca se transmite, registra ni almacena, y la pantalla de resultado ni siquiera lo repite entero (solo su longitud en bytes), así que no puede quedar en pantalla más tiempo del necesario.

Usos habituales

Cómo funciona, en imágenes

Captura de pantalla de la herramienta Generador de JWT con la entrada de ejemplo «{"sub":"sysfenix-demo","name":"Local Only","iat"…», Signing algorithm en HS256 (recommended), Auto-add "exp" claim (expires in) en Don't add automatically
Generador de JWT en pleno proceso: la entrada de ejemplo «{"sub":"sysfenix-demo","name":"Local Only","iat"…», Signing algorithm en HS256 (recommended), Auto-add "exp" claim (expires in) en Don't add automatically.
Captura de pantalla del resultado de Generador de JWT mostrando la salida generada «=== JWT GENERATOR === Algorithm: HS256 Status: E…»
El resultado final: la salida generada «=== JWT GENERATOR === Algorithm: HS256 Status: E…». El enlace de descarga es una URL blob local: el archivo nunca sale de tu dispositivo.

Preguntas frecuentes

¿Se envía alguna vez mi clave secreta a un servidor?

No. La firma se calcula enteramente dentro de tu pestaña del navegador usando la Web Crypto API, tu clave secreta se usa solo para calcular el HMAC y nunca se transmite, registra ni almacena en ningún sitio. Muchas webs de "generador de jwt" calculan la firma silenciosamente en el servidor, lo que significa que tu secreto pasa brevemente por la infraestructura de otra persona; esta herramienta nunca necesita hacer eso. El resultado tampoco repite nunca tu secreto entero (solo su longitud en bytes) así que no puede quedar visible en pantalla ni acabar en una captura de pantalla copiada y pegada.

¿Cómo introduzco el header, el payload y el secreto en una sola caja de texto?

Pega tu entrada usando tres (o cuatro) líneas de marcador, una por sección, `=== HEADER ===` (opcional), `=== PAYLOAD ===` (obligatorio) y `=== SECRET ===` (obligatorio), cada una seguida de su propio contenido en la línea o líneas siguientes. Un cuarto marcador opcional `=== SUBJECT ===` te permite fijar el claim `sub` del payload sin editar tú mismo el JSON. Ve "Cómo generar un JWT" más abajo para un ejemplo completo resuelto, es la misma convención de marcadores de sección que usa el Decodificador de JWT compañero para su SALIDA, así que pegar aquí el header/payload de un token decodificado funciona sin reformatear nada.

¿Tengo que escribir yo mismo el header?

No, si omites por completo la sección `=== HEADER ===`, se genera automáticamente un header mínimo `{"alg": "<algoritmo elegido>", "typ": "JWT"}`. Si SÍ pegas tu propio header (para añadir una clave `kid`, por ejemplo), su campo `alg` siempre se sobrescribe para que coincida con el algoritmo que elegiste en el desplegable, el header de un token debe declarar honestamente el algoritmo con el que realmente fue firmado, así que nunca se permite que un valor pegado y no coincidente produzca silenciosamente un token cuyo header mienta sobre cómo fue firmado.

¿Qué hacen realmente las ayudas de "exp"/"iat", y sobrescribirán claims que ya haya puesto?

Solo rellenan un HUECO, nunca sobrescriben un claim que tu propio JSON pegado en PAYLOAD ya tenga. Con "Añadir iat automáticamente" marcado (por defecto), `iat` se fija al timestamp Unix actual solo si tu payload no incluye ya uno. Con "Añadir exp automáticamente" fijado en algo distinto de "No añadir automáticamente", `exp` se fija en (el propio `iat` de tu payload si está presente, o si no la hora actual) más la duración seleccionada, de nuevo, solo si tu payload no tiene ya un `exp`. Si quieres una caducidad exacta personalizada, simplemente añade `"exp": 1234567890` a tu propio payload pegado y la ayuda lo deja intacto.

¿Esto admite RS256, ES256 u otros algoritmos asimétricos?

No, solo se admiten los tres algoritmos HMAC (HS256/HS384/HS512). Verificar una ruta de firma RSA/ECDSA contra los mismos vectores de referencia reales e independientemente comprobables contra los que se verificó la firma HMAC de esta herramienta (ver la siguiente entrada de FAQ) quedó fuera del alcance de esta versión; RS256/ES256 también necesitan una clave privada que esta herramienta no tiene forma de generarte de manera responsable. Si tu caso de uso requiere específicamente un algoritmo asimétrico, esta todavía no es la herramienta adecuada.

¿Cómo sé que los tokens generados están realmente firmados correctamente?

El pipeline de firma de esta herramienta se comprobó contra vectores de referencia reales calculados de forma independiente antes de publicarse, no simplemente confiado tras leer el texto de la especificación JWT. En concreto, reproduce byte a byte el famoso token de ejemplo de jwt.io, comprobable de forma independiente (header `{"alg":"HS256","typ":"JWT"}`, payload `{"sub":"1234567890","name":"John Doe","iat":1516239022}`, secreto `your-256-bit-secret`), junto con vectores adicionales de HS384/HS512 y UTF-8 multibyte calculados de forma independiente con el propio `crypto.createHmac` de Node.js. Puedes verificar tú mismo cualquier token que produzca esta herramienta pegándolo en el Decodificador de JWT compañero (para confirmar el viaje de ida y vuelta de header/payload) o recalculando de forma independiente el HMAC con el Generador de HMAC usando el mismo secreto sobre el propio segmento `header.payload` del token.

¿Puedo pegar un JWT aquí para comprobarlo o editarlo, y luego volver a firmarlo?

No directamente, esta herramienta construye un token NUEVO a partir de un header/payload/secreto que tú proporcionas, no analiza un token existente para convertirlo en campos editables. Decodifica primero un token existente con el Decodificador de JWT, copia sus secciones `=== HEADER ===`/`=== PAYLOAD ===` (el formato coincide con la propia convención de entrada de esta herramienta), edita los claims que quieras cambiar, pégalos de vuelta aquí junto con un secreto, y genera un token nuevo y recién firmado.

Herramientas relacionadas