Pega un token o introduce un contenido y secreto de prueba para crearlo. Una firma válida no sustituye los controles de emisor, audiencia y autorización.
Se ejecuta localmente en tu navegadorInspect a token to view its header.
Inspect a token to view its payload.
El secreto solo se utiliza en la API criptográfica del navegador. El verificador admite HS256, HS384 y HS512 y no envía el token ni el secreto a VoriTools.
Genera únicamente tokens HS256, HS384 o HS512. El payload y el secreto permanecen en Web Crypto; esta herramienta nunca ofrece alg: none.
Generate a local HMAC JWT to view it here.
Los claims decodificados son datos Base64URL legibles, no una prueba de confianza. Comprueba algoritmo, caducidad, issuer y audience y verifica la firma con una clave o secreto de confianza antes de aceptar el token.
Esta página divide un JWT compacto en su cabecera, su payload y su firma, muestra los claims decodificados y verifica la firma cuando el token está firmado con HMAC y facilitas el secreto. También genera tokens HS256, HS384 o HS512 de vida corta a partir de un payload que escribes tú.
Decodificar y verificar son dos pasos separados a propósito. Cualquiera puede leer el payload de un JWT sin clave, y una firma válida solo demuestra que el token se firmó con esa clave; no dice si ha caducado, si se emitió para tu servicio ni qué permite hacer.
La cabecera es JSON codificado en Base64URL que normalmente declara alg y typ, y a veces un kid que indica al verificador qué clave usar. El payload es el conjunto de claims: los registrados (iss, sub, aud, exp, nbf, iat, jti) más los privados que añade el emisor. La firma es el algoritmo aplicado a la cadena ASCII base64url(header) + "." + base64url(payload) con la clave.
Base64URL es el alfabeto Base64 estándar con + y / sustituidos por - y _ y sin relleno. Por eso un token viaja en una URL, una cookie o una cabecera Authorization sin escapes, y por eso reconstruir el token a mano suele romper la firma.
Solo la familia HMAC: HS256, HS384 y HS512, porque basta un secreto compartido para recalcularlas. RS256, PS256, ES256 y EdDSA firman con clave privada y verifican con clave pública, así que aquí se pueden decodificar pero no verificar; para eso necesitas la JWK pública del emisor. Con un token RS256 el botón Verificar firma queda desactivado y el aviso lo explica.
Un token que declare alg como none se marca en rojo: nunca debe aceptarse, y un verificador jamás debería fiarse del algoritmo que anuncia el propio token sin contrastarlo con una lista permitida. Sustituir HS256 por RS256 y firmar con la clave pública como si fuera un secreto HMAC es un ataque conocido contra librerías descuidadas.
exp debe estar en el futuro y nbf en el pasado, en segundos desde la época Unix, con algo de margen entre relojes. iat debe ser verosímil, no futuro. iss y aud tienen que coincidir con tu servicio; si no, se aceptará un token emitido para otra aplicación.
Comprobar la firma no es autorizar. Los roles, los permisos y el identificador de inquilino viven en claims privados, y el conjunto de claims de un JWT va firmado pero no cifrado: nunca pongas un secreto en un payload que no enseñarías a quien tiene el token.
La decodificación y la verificación HMAC se ejecutan en tu navegador, así que el token no se sube. Aun así, lo prudente es probar con tokens de usar y tirar: un refresh token de producción o una credencial de larga vida no deberían pegarse en ninguna página web, tampoco en esta.
Esos algoritmos son asimétricos y esta página solo recalcula firmas HMAC. El token se puede decodificar y sus claims leer, pero verificarlo exige la clave pública del emisor y una librería que soporte JWA, algo que una página en el navegador con un secreto compartido no puede hacer correctamente.
O el secreto no es el correcto, o el algoritmo elegido no coincide con el de la cabecera, o el texto del token cambió después de firmarse. Editar el payload, reindentarlo y volver a codificarlo a mano da el mismo resultado, porque la firma cubre los bytes originales exactos.
Porque un JWT va firmado, no cifrado. Base64URL es una codificación y cualquiera que tenga el token puede decodificar cabecera y payload sin ninguna clave. Si los claims son sensibles, usa JWE, que cifra el contenido para un destinatario.
JWT es el conjunto de claims, los datos. JWS es la serialización firmada que produce el token compacto de tres partes que inspecciona esta página. JWE es la serialización cifrada, donde el payload no se puede leer sin clave y la estructura tiene cinco partes en lugar de tres.
Minutos, no horas. Pon Caducidad en minutos en un valor pequeño para que un token de prueba filtrado deje de servir, y recuerda que esta página firma con el secreto que escribes en local, así que el token solo vale para sistemas que compartan ese secreto.