Codificador y Generador JWT
Generador y codificador JWT gratis online. Construye el encabezado y la carga útil, firma con HS256, RS256 o ES256 al instante. 100% en el navegador — tu secreto y tu clave nunca salen de tu dispositivo.
¿Qué es un Codificador JWT?
Un codificador JWT construye y firma criptográficamente un JSON Web Token a partir de un encabezado y una carga útil de reclamaciones. Un JWT, definido en RFC 7519, son tres secciones codificadas en Base64URL unidas por puntos: header.payload.signature. El encabezado nombra el algoritmo de firma; la carga útil transporta las reclamaciones (sobre quién es el token, qué puede hacer, cuándo expira); y la firma es una prueba criptográfica, calculada sobre el encabezado y la carga útil con un secreto o clave privada, que permite a un destinatario detectar manipulaciones.
«JSON Web Token (JWT) es un formato compacto de representación de reclamaciones destinado a entornos con limitaciones de espacio, como los encabezados HTTP Authorization y los parámetros de consulta URI.» — RFC 7519, Sección 1
Codificar es lo inverso de decodificar. Un decodificador JWT lee las reclamaciones de un token existente; un codificador toma las reclamaciones que proporcionas y produce un token firmado completamente nuevo. El paso de firma es lo que separa un JWT real de un Base64 arbitrario — sin una firma válida, ningún verificador aceptará el token. Esta herramienta firma usando la Web Crypto API nativa del navegador a través de las familias HMAC (HS), RSA (RS, PS) y ECDSA (ES), así que toda la operación ocurre en tu dispositivo con cero dependencias y cero llamadas de red.
Los desarrolladores recurren a un codificador JWT constantemente: para acuñar un token que ejercite un endpoint de API protegido, para reproducir la forma exacta de reclamación que emite un servidor OAuth y así depurar un error, para construir fixtures para pruebas de integración, o para entregar a un compañero un token Bearer listo para usar en un comando curl. Como la carga útil está codificada, no cifrada, un JWT es seguro de pasar por la red pero nunca debe transportar secretos — cualquiera con el token puede leer cada reclamación, y solo la firma impide que la cambien.
El trabajo con JWT se combina de forma natural con otras herramientas para desarrolladores. Después de firmar, decodifica el token para confirmar sus reclamaciones, convierte exp e iat entre tiempo Unix y fechas humanas, o calcula un hash SHA-256 cuando necesites la función hash subyacente sobre la que se construye el HMAC de HS256. Como cada segmento JWT está codificado en Base64URL, una herramienta Base64 es útil cuando inspeccionas un token a mano; para una mirada en profundidad a la codificación, consulta nuestra guía de fundamentos de Base64.
// Sign a JWT in the browser with the Web Crypto API (HS256)
async function encodeJwt(payload, secret) {
const b64url = (bytes) =>
btoa(String.fromCharCode(...new Uint8Array(bytes)))
.replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, '');
const enc = (obj) =>
b64url(new TextEncoder().encode(JSON.stringify(obj)));
const header = { alg: 'HS256', typ: 'JWT' };
const signingInput = `${enc(header)}.${enc(payload)}`;
const key = await crypto.subtle.importKey(
'raw', new TextEncoder().encode(secret),
{ name: 'HMAC', hash: 'SHA-256' }, false, ['sign']);
const sig = await crypto.subtle.sign(
'HMAC', key, new TextEncoder().encode(signingInput));
return `${signingInput}.${b64url(sig)}`;
}
const token = await encodeJwt({ sub: 'user_123', exp: 1999999999 }, 'my-secret');
// → eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJ1c2VyXzEyMyIsImV4cCI6MTk5OTk5OTk5OX0.... Características Clave
Genera y Firma JWT al Instante
Edita la carga útil y observa cómo el token firmado se actualiza en tiempo real — encabezado, carga útil y firma calculados al vuelo. Sin botón de Generar, sin viaje de ida y vuelta a un servidor.
Cobertura Completa de Algoritmos
Firma con HS256/384/512, RS256/384/512, PS256/384/512 y ES256/384/512 — toda familia JWS común, todas mediante la Web Crypto API nativa del navegador.
Las Claves Nunca Salen de tu Dispositivo
Tu secreto y clave privada PKCS8 se usan completamente en el navegador. Nada se sube, registra ni almacena — seguro para desarrollo y respuesta a incidentes.
Ayudantes de Reclamación Rápida
Inserta iss, sub, aud, iat, nbf o una exp de una hora con un solo clic — sin marcas de tiempo Unix manuales, sin deslices de sintaxis.
Salida Codificada por Color
El token firmado se segmenta en encabezado, carga útil y firma con colores distintos, así la estructura es obvia de un vistazo y fácil de copiar.
Cero Dependencias
Construido solo sobre la Web Crypto API y JSON del navegador — sin bibliotecas externas, sin telemetría, sin llamadas de red de ningún tipo.
Ejemplos
Token de Sesión HS256
{
"sub": "user_123",
"name": "Alice",
"role": "admin",
"iat": 1715000000,
"exp": 1999999999
}
secret: a-string-secret-at-least-256-bits-long eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJ1c2VyXzEyMyIsIm5hbWUiOiJBbGljZSIsInJvbGUiOiJhZG1pbiIsImlhdCI6MTcxNTAwMDAwMCwiZXhwIjoxOTk5OTk5OTk5fQ.<HMAC-SHA256 signature>
Un token HMAC-SHA256 firmado con un secreto compartido — la configuración más común para la autenticación de sesión sin estado. Cualquiera que tenga el mismo secreto puede verificarlo.
Token de Acceso RS256
{
"iss": "https://auth.example.com",
"aud": "api.example.com",
"sub": "90087165",
"scope": "read:user write:post",
"iat": 1715000000,
"exp": 1999999999
}
private key: -----BEGIN PRIVATE KEY----- (PKCS8) eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJodHRwczovL2F1dGguZXhhbXBsZS5jb20iLCJhdWQiOiJhcGkuZXhhbXBsZS5jb20iLCJzdWIiOiI5MDA4NzE2NSIsInNjb3BlIjoicmVhZDp1c2VyIHdyaXRlOnBvc3QiLCJpYXQiOjE3MTUwMDAwMDAsImV4cCI6MTk5OTk5OTk5OX0.<RSA signature>
Un token de acceso estilo OAuth firmado con RSA. El token se firma con tu clave privada y lo verifica cualquiera que tenga la clave pública correspondiente — ideal cuando el verificador no debe poder acuñar tokens.
Token Compacto ES256
{
"sub": "device-42",
"iat": 1715000000,
"exp": 1999999999
}
private key: -----BEGIN PRIVATE KEY----- (P-256) eyJhbGciOiJFUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJkZXZpY2UtNDIiLCJpYXQiOjE3MTUwMDAwMDAsImV4cCI6MTk5OTk5OTk5OX0.<ECDSA P-256 signature>
Un token ECDSA sobre la curva P-256. Las firmas ES256 son mucho más cortas que las RSA ofreciendo seguridad equivalente, lo que mantiene el token pequeño para entornos con limitaciones.
Cómo Usar
- 1
Edita las Reclamaciones de la Carga Útil
Escribe las reclamaciones que tu token necesita como JSON en el editor de carga útil. Usa los chips de reclamación rápida para insertar iss, sub, aud, iat, nbf o una exp de una hora sin escribir marcas de tiempo.
- 2
Elige el Algoritmo e Introduce la Clave
Elige un algoritmo de firma. Para HS256/384/512 introduce un secreto; para los algoritmos RS, PS o ES pega una clave privada PKCS8 PEM. El token se firma localmente mientras escribes.
- 3
Copia el JWT Firmado
El token firmado aparece al instante, codificado por color por segmento. Haz clic en Copiar para llevarlo a un encabezado Authorization, un comando curl o una prueba. Tu clave nunca salió de tu navegador.
Common Errors
Usar un Secreto HMAC Débil
La seguridad de HS256 depende enteramente de la entropía del secreto. Un secreto corto o adivinable permite a los atacantes forzarlo por fuerza bruta y falsificar tokens. Usa al menos 256 bits de aleatoriedad.
secret: "password123" // guessable, low entropy
secret: base64(crypto.randomBytes(32)) // >=256 random bits
Omitir la Reclamación exp
Un token sin exp nunca expira. Si se filtra, no hay un punto de revocación natural. Establece siempre una expiración apropiada para el tipo de token.
{ "sub": "user_123", "role": "admin" } // no exp { "sub": "user_123", "role": "admin", "exp": 1715003600 } Pegar una Clave PKCS1 en Lugar de PKCS8
La Web Crypto API importa solo claves privadas PKCS8. Una clave RSA PKCS1 tradicional falla al importarse — conviértela primero.
-----BEGIN RSA PRIVATE KEY----- // PKCS1, not supported
openssl pkcs8 -topk8 -nocrypt -in pkcs1.pem -out pkcs8.pem
Casos de Uso Comunes
- Genera Tokens para Pruebas de API
- Genera un token Bearer HS256 en segundos para ejercitar un endpoint protegido desde curl, Postman o una prueba de integración.
- Reproduce Tokens OAuth y OIDC
- Construye un token RS256 o ES256 que refleje lo que emite tu servidor de autorización, para depurar desajustes de reclamación y audiencia.
- Crea Fixtures de Prueba
- Produce tokens firmados deterministas para pruebas unitarias y de integración sin levantar un servidor de autenticación completo.
- Depura Fallos de Autorización
- Recrea la forma del token de un cliente — emisor, audiencia, scope, expiración — para encontrar por qué un backend lo rechaza.
- Valida un Verificador
- Firma tokens con una clave conocida para confirmar que tu middleware de verificación acepta tokens válidos y rechaza los manipulados.
- Prototipa Flujos de Autenticación
- Entrega a tus compañeros tokens listos para usar mientras configuráis un nuevo login, microservicio o llamada de servicio a servicio.
Detalles Técnicos
- Conforme con RFC 7519 / 7515 / 7518
- Produce tokens JWS conformes a RFC 7519 (JWT), RFC 7515 (JWS) y RFC 7518 (JWA), con los identificadores de algoritmo registrados en el encabezado.
- Firma Nativa con Web Crypto
- Firma mediante crypto.subtle para HMAC, RSASSA-PKCS1-v1_5, RSA-PSS y ECDSA. Las firmas ECDSA se emiten como r||s en bruto, exactamente como exige JWS.
- Base64URL, Cero Dependencias
- El encabezado y la carga útil se codifican en Base64URL con el alfabeto seguro para URL (RFC 4648), sin relleno. Sin bibliotecas externas, sin llamadas de red, sin telemetría.
Mejores Prácticas
- Establece Siempre una Expiración
- Incluye una reclamación exp para que un token filtrado deje de ser válido. Las vidas cortas reducen el radio de impacto — minutos para tokens de acceso, no días.
- Mantén los Secretos Fuera de la Carga Útil
- Una carga útil JWT es legible por cualquiera con el token. Pon identificadores y scopes en ella; nunca contraseñas, claves API o PII completa.
- Firma del Lado del Servidor en Producción
- Usa esta herramienta para pruebas y depuración. En sistemas reales, firma tokens en el servidor con una biblioteca mantenida y una clave de tu gestor de secretos.
Preguntas Frecuentes
¿Cómo genero un JWT online?
¿Qué es un generador JWT?
header.payload.signature que puedes usar como token Bearer. Es lo inverso de un decodificador JWT: en lugar de leer un token existente, crea uno nuevo firmado con tu secreto (HS256) o clave privada (RS256/ES256). Este generador se ejecuta completamente en tu navegador, así que el token se produce al instante y tu clave de firma nunca sale de tu dispositivo. ¿Es este generador JWT gratis y seguro de usar?
¿Es seguro introducir mi secreto o clave privada aquí?
¿Cuál es la diferencia entre HS256 y RS256?
¿Qué algoritmos soporta este codificador JWT?
¿Cómo establezco la reclamación exp (expiración)?
exp a la carga útil como una marca de tiempo Unix en segundos — por ejemplo "exp": 1999999999. La forma más rápida es el chip exp +1h debajo de la carga útil, que inserta una expiración una hora desde ahora. También puedes añadir iat (emitido en) y nbf (no antes de) de la misma forma. Recuerda que exp está en segundos, no en milisegundos, y que los verificadores lo comparan con su propio reloj, así que mantén las horas del servidor sincronizadas para evitar rechazos prematuros. Para convertir una fecha humana a una marca de tiempo Unix, usa nuestro convertidor de timestamp Unix. ¿Cómo obtengo una clave privada PKCS8 PEM para RS256 o ES256?
openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:2048 -out private.pem. Para ECDSA P-256: openssl genpkey -algorithm EC -pkeyopt ec_paramgen_curve:P-256 -out ec-private.pem. Ambos comandos emiten un bloque PKCS8 PEM que comienza con -----BEGIN PRIVATE KEY-----, que es exactamente lo que esta herramienta espera. Pega el bloque completo, incluyendo las líneas de encabezado y pie. La clave pública correspondiente — usada para verificar el token — se puede derivar con openssl pkey -in private.pem -pubout. ¿Cómo verifico el token que acabo de generar?
jwt.verify(token, secretOrPublicKey, { algorithms: ['HS256'] }) en Node.js, PyJWT.decode(token, key, algorithms=['RS256']) en Python, o jwt.Parse(token, keyFunc) en Go. Nunca verifiques con una lista de algoritmos vacía ni con verify_signature=False en producción — fija siempre el algoritmo exacto que esperas. ¿Qué debería poner en la carga útil?
iss (emisor), sub (sujeto — normalmente un ID de usuario), aud (audiencia), exp (expiración), nbf (no antes de), iat (emitido en) y jti (ID de token). Junto a estas puedes añadir reclamaciones de aplicación como role, scope o email. No pongas secretos en la carga útil — un JWT está codificado, no cifrado, así que cualquiera con el token puede leer cada reclamación. Mantén los tokens por debajo de unos 4 KB para que quepan en encabezados Authorization y cookies. ¿Está cifrado un JWT?
¿Por qué falla mi firma RS256 o ES256?
-----BEGIN RSA PRIVATE KEY----- (PKCS1) con openssl pkcs8 -topk8 -nocrypt -in old.pem -out pkcs8.pem; (2) la curva no coincide con el algoritmo — ES256 necesita una clave P-256, ES384 necesita P-384, ES512 necesita P-521; (3) pegaste una clave pública o un certificado en lugar de la clave privada; o (4) la clave está cifrada con una frase de contraseña, que la Web Crypto API no puede importar directamente. Descífrala primero con openssl pkey y pega el bloque PKCS8 sin cifrar. ¿Esta herramienta soporta el token sin firmar alg:none?
alg:none no tiene firma, lo que significa que cualquiera puede falsificar uno — es la raíz de una clásica vulnerabilidad de bypass de autenticación JWT. Como el propósito mismo de un codificador es producir un token firmado, esta herramienta solo ofrece algoritmos de firma reales. Si estás estudiando alg:none para investigación de seguridad, puedes construir uno a mano codificando en Base64URL el encabezado y la carga útil y dejando vacío el segmento de firma — el token aún termina con un punto final (header.payload.) — pero nunca deberías aceptar tal token en producción. ¿Puedo generar un JWT en código en su lugar?
jsonwebtoken.sign(payload, secret, { algorithm: 'HS256', expiresIn: '1h' }). En Python: jwt.encode(payload, key, algorithm='RS256') con PyJWT. En Go: jwt.NewWithClaims(jwt.SigningMethodES256, claims).SignedString(privateKey). Esta herramienta es la forma más rápida de producir un token para una prueba rápida, una petición curl o un fixture — pero en código de aplicación deberías generar tokens del lado del servidor con una biblioteca mantenida y una clave cargada desde tu gestor de secretos, nunca codificada de forma fija. Herramientas relacionadas
Ver todas las herramientas →Decodificador JWT
Herramientas de Seguridad
Decodifica tokens JWT online con nuestro decodificador JWT gratis. Inspecciona encabezado, carga útil, firma, expiración y reclamaciones al instante. 100% navegador — tu token nunca sale del dispositivo. Sin registro ni rastreo.
Generador de Hash MD5 Online y Verificador de Checksum
Herramientas de Seguridad
Genera hashes MD5, SHA-256, SHA-1 y SHA-512 gratis — 100% en tu navegador, sin registro. Hashea texto o archivos, verifica checksums y compara hashes con un clic. Tus datos permanecen privados.
Generador de Contraseñas Aleatorias y Seguras
Herramientas de Seguridad
Genera contraseñas seguras al instante — gratis, sin registro, 100% en tu navegador. Personaliza la longitud y los tipos de caracteres, genera hasta 50 contraseñas. Medidor de fortaleza con análisis de entropía.
Generador de Hash SHA-1 (Legado de 160 bits)
Herramientas de Seguridad
Genera hashes SHA-1 en tu navegador — salida hex de 40 caracteres, sin subidas. Herramienta para huellas Git, comprobación de certificados antiguos y auditorías de migración. Datos nunca salen de tu dispositivo.
Generador de Hash SHA-256 y Verificador de Checksum
Herramientas de Seguridad
Genera hashes SHA-256 online gratis. Hashea texto o archivos en tu navegador, verifica checksums y copia la salida hex de 64 caracteres. Sin registro; los datos nunca salen de la página.
Generador de Hash SHA-3 (Keccak SHA3-256)
Herramientas de Seguridad
Genera hashes SHA-3 online gratis. Construcción de esponja NIST FIPS 202 — el estándar posterior a SHA-2. Salida SHA3-256 en 64 caracteres hex. Solo en navegador vía js-sha3; sin subidas.