Cómo usarla
- Elige HS256, HS384 o HS512.
- Edita los claims del payload y pulsa «Establecer iat y exp» para añadir la hora actual y una expiración.
- Introduce un secreto de prueba o genera uno aleatorio de 256 bits.
- Copia el token firmado. Para comprobar un token, cambia a «Verificar firma», pégalo e introduce el secreto.
Cómo funciona
Un JSON Web Token (RFC 7519) tiene tres partes codificadas en Base64URL: un encabezado, un payload de claims y una firma. Con los algoritmos HMAC HS256, HS384 y HS512, la firma es un HMAC con SHA-256, SHA-384 o SHA-512 sobre «header.payload», usando un secreto compartido como clave. Cualquiera que tenga el secreto puede crear y verificar tokens.
La herramienta serializa el encabezado y el payload como JSON compacto, los codifica y los firma con crypto.subtle, la Web Crypto API integrada en tu navegador. El campo alg del encabezado siempre coincide con el algoritmo elegido, typ es JWT de forma predeterminada y se conservan los demás campos del encabezado, como kid. «Establecer iat y exp» escribe la hora actual como iat (issued at) y añade la duración elegida como exp, ambos en segundos desde el 1 de enero de 1970 UTC. El resultado coincide con otras bibliotecas JWT; por ejemplo, el token de ejemplo clásico de jwt.io se reproduce exactamente.
El secreto puede ser texto plano (sus bytes UTF-8 son la clave) o bytes codificados en Base64/Base64URL, algo que usan muchos frameworks. El botón de secreto aleatorio crea 32 bytes aleatorios con crypto.getRandomValues. Para HS256, utiliza al menos 32 bytes aleatorios; los secretos cortos elegidos por humanos pueden adivinarse sin conexión a partir de cualquier token.
La verificación decodifica el token, comprueba que utiliza un algoritmo HMAC y recalcula la firma con crypto.subtle.verify. También muestra cuándo exp o nbf indican que el token ha caducado o aún no es válido. No se admiten RS256, ES256 ni otros algoritmos de clave pública, y esta verificación no comprueba issuer, audience ni otras claims que tu aplicación pueda requerir.
Ejemplos
Probar una API localmente
Tu servidor de desarrollo espera tokens HS256 firmados con «dev-secret-change-me». Establece sub con un ID de usuario de prueba, haz clic en «Establecer iat y exp» con 1 hora, introduce el secreto y envía el token en un encabezado Authorization: Bearer.
Comprobar qué secreto firmó un token
Un token de staging se rechaza. Pégalo en «Verificar firma» y prueba el secreto de staging: «Firma no válida» te indica que el token se firmó con un secreto diferente o que el secreto está en un formato distinto (texto en lugar de Base64).
Reproducir el ejemplo de jwt.io
Con la cabecera {"alg":"HS256","typ":"JWT"}, el payload {"sub":"1234567890","name":"John Doe","iat":1516239022} y el secreto «your-256-bit-secret», el token termina en SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c, igual que en jwt.io.
Preguntas frecuentes
¿Se envía mi secreto a tu servidor?
No. La firma y la verificación se ejecutan con la API Web Crypto dentro de tu navegador, y el secreto no se almacena ni se envía a ningún sitio. Aun así, recomendamos usar solo secretos de prueba, porque un secreto de firma real nunca debería escribirse en un sitio web.
¿Por qué la firma no es válida aunque el secreto sea correcto?
Comprueba el formato del secreto. Algunos sistemas usan el texto del secreto y otros lo decodifican primero desde Base64, lo que produce bytes de clave distintos. Comprueba también que el token no se haya modificado y que utilice el mismo algoritmo.
¿Puedo crear tokens RS256 o ES256?
No con esta herramienta. Solo admite los algoritmos HMAC de secreto compartido HS256, HS384 y HS512.
¿El payload está cifrado?
No. Un JWT firmado solo está codificado; cualquiera puede decodificarlo y leer el payload. La firma solo prueba que no se ha modificado. No incluyas contraseñas ni otros secretos en el payload.
Privacidad
Los tokens solo se crean y verifican en tu navegador con la API Web Crypto. La cabecera, el payload, el token y el secreto no se suben, no se almacenan ni se incluyen en las analíticas.