Generador de JWT
Crea un JSON Web Token a partir de un header y un payload, fírmalo con un secreto HMAC y cópialo. La firma usa la Web Crypto API del navegador, así que tu secreto nunca sale de esta página.
Última actualización:
–Verificar un token
Cómo usar Generador de JWT
- Elige el algoritmo: HS256, HS384 o HS512. El campo alg del header se actualiza automáticamente.
- Edita los claims del payload como JSON y usa los botones para fijar iat, nbf, exp o un jti aleatorio.
- Introduce el secreto que usa tu servidor o pulsa Secreto aleatorio. Marca la casilla Base64 si el secreto está guardado codificado.
- Pulsa Generar JWT (el token también se actualiza mientras escribes) y copia el token o el header Bearer.
- Verifica un token: pega abajo cualquier JWT firmado con HMAC y su secreto, y pulsa Verificar token.
Cómo se construye un JWT firmado con HMAC
Un token JWS compacto es base64url(header) . base64url(payload) . base64url(signature). Base64url es Base64 con - en lugar de +, _ en lugar de / y sin relleno =. La firma es:
firma = HMAC-SHA256( secreto, base64url(header) + "." + base64url(payload) )
Ejemplo resuelto (el conocido token de jwt.io): el header {"alg":"HS256","typ":"JWT"} se convierte en eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9; el payload {"sub":"1234567890","name":"John Doe","iat":1516239022} se convierte en eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ. Firmado con el secreto your-256-bit-secret, la firma es SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c. Pega esos valores en la herramienta y obtendrás exactamente el mismo token.
Claims registrados (RFC 7519)
| Claim | Nombre | Significado | Ejemplo |
|---|---|---|---|
iss | Emisor | Quién creó y firmó el token | "https://auth.example.com" |
sub | Sujeto | El usuario o entidad al que se refiere el token | "user_42" |
aud | Audiencia | A quién va dirigido el token (cadena o array) | "api.example.com" |
exp | Fecha de expiración | Rechazar el token en este momento o después (segundos) | 1767225600 |
nbf | No antes de | Rechazar el token antes de este momento | 1767222000 |
iat | Emitido en | Cuándo se creó el token | 1767222000 |
jti | ID del JWT | ID único, se usa para evitar reenvíos (replay) | "n3Kp…" |
HS256 vs HS384 vs HS512
| Algoritmo | Hash | Tamaño de la firma | Longitud de la firma (base64url) | Secreto mínimo |
|---|---|---|---|---|
| HS256 | SHA-256 | 32 bytes | 43 caracteres | 32 bytes (256 bits) |
| HS384 | SHA-384 | 48 bytes | 64 caracteres | 48 bytes (384 bits) |
| HS512 | SHA-512 | 64 bytes | 86 caracteres | 64 bytes (512 bits) |
Los tres son simétricos: el mismo secreto firma y verifica, así que cualquier servicio que compruebe el token también puede crear uno. Cuando muchos servicios independientes solo deben verificar tokens, un algoritmo asimétrico como RS256 o ES256 es la mejor opción.
Consejos de seguridad para tokens HMAC
- Genera el secreto con un generador aleatorio criptográfico (el botón Secreto aleatorio usa
crypto.getRandomValues) y mantenlo fuera del control de versiones. - Comprueba siempre
expen el servidor y haz que los tokens de acceso duren poco (5–60 minutos). - Fija el algoritmo esperado al verificar y nunca aceptes
"alg": "none". - Recuerda que cualquiera puede leer el payload: guarda un ID, no datos personales.
Preguntas frecuentes
¿Qué es un JWT?
Un JSON Web Token (RFC 7519) es una cadena compacta y segura para URL con tres partes en Base64url separadas por puntos: un header que indica el algoritmo, un payload de claims como sub, iat y exp, y una firma que demuestra que las dos primeras partes no se modificaron.
¿Cómo se calcula una firma HS256?
La herramienta codifica en Base64url el header y el payload en JSON compacto, los une con un punto y calcula el HMAC-SHA256 de ese texto con tu secreto. El resultado de 32 bytes se codifica en Base64url sin relleno y se añade como tercera parte. HS384 y HS512 usan SHA-384 y SHA-512.
¿Qué longitud debe tener mi secreto?
La RFC 7518 exige una clave HMAC al menos tan larga como la salida del hash: 32 bytes para HS256, 48 para HS384 y 64 para HS512. Las contraseñas cortas se pueden descifrar por fuerza bruta sin conexión a partir de cualquier token, así que usa el botón Secreto aleatorio para sistemas reales.
¿iat, nbf y exp van en segundos o en milisegundos?
En segundos. Los claims de tiempo de un JWT son valores NumericDate: segundos enteros desde el 1 de enero de 1970 UTC. Un valor de 13 dígitos probablemente está en milisegundos y se leerá como una fecha decenas de miles de años en el futuro.
¿El payload está cifrado?
No. Un JWT firmado solo está codificado, así que cualquiera que tenga el token puede leer los claims. Nunca pongas contraseñas ni otros secretos en el payload. Usa JWE si el contenido debe quedar oculto.
¿Por qué falla la verificación?
Las causas habituales son un secreto distinto, un secreto que está codificado en Base64 en el servidor pero se introdujo aquí como texto plano (o al revés), un token modificado después de firmarlo o un algoritmo distinto de HS256, HS384 o HS512.
¿Se envía mi secreto a algún sitio?
No. Los tokens se firman y se verifican en tu navegador con la Web Crypto API. Nada de lo que escribes se sube ni se guarda.
¿Se prueban todas las herramientas de FreeToolCabin para comprobar su calidad y precisión?
Sí. Cada herramienta del sitio pasa pruebas automáticas en navegadores reales para comprobar que el resultado es correcto y que no hay errores. Si encuentras un fallo o tienes una sugerencia, escríbenos a [email protected] y lo revisaremos.