Acerca de esta herramienta
Qué es un JWT
Un JSON Web Token firmado (RFC 7519) son tres cadenas Base64URL unidas por puntos: un header, un payload y una firma. El header indica cómo se firma el token (alg). El payload es un objeto JSON de claims, afirmaciones como de quién trata el token (sub), quién lo emitió (iss) y cuándo expira (exp). La firma se calcula sobre las dos primeras partes.
Decodificar no es verificar. El header y el payload solo están codificados, no cifrados: cualquiera que tenga un token puede leerlo, como hace esta página sin ninguna clave, y cualquiera puede escribir un token con los claims que quiera. Nunca pongas un secreto en el payload de un JWT, y nunca te fíes de un claim antes de verificar la firma.
Verificar la firma
HS256, HS384 y HS512 son HMAC: el mismo secreto firma y verifica, así que todo el que puede verificar también puede falsificar. RS256, PS256 y ES256 y sus variantes 384 y 512 son asimétricos: el emisor firma con una clave privada y tú verificas con la clave pública, que a menudo se publica como un JWK Set en el jwks_uri del emisor.
Pega el secreto, o la clave pública como PEM, como certificado X.509 o como JWK. La comprobación la hace la Web Crypto API de tu navegador. El resultado es uno de tres: la firma es válida, no es válida o no se pudo comprobar. En el último caso la página dice por qué: no hay clave, la clave tiene un tipo o una curva incorrectos, el algoritmo no es compatible, o el header dice "alg": "none", lo que significa que el token no está firmado en absoluto.
Una firma válida es necesaria, pero no suficiente. Un servicio real también debe comprobar la expiración, el emisor y la audiencia, y debe decidir por sí mismo qué algoritmo acepta en lugar de creer lo que dice el header del token.
Fechas, el token de ejemplo y la firma
exp, nbf e iat son timestamps Unix en segundos. La tabla de claims los muestra como fechas en tu zona horaria, y el indicador de encima dice si el token ha expirado, si aún no es válido o cuánto tiempo le queda de validez, según el reloj de tu dispositivo.
La página se abre con un token de ejemplo que se crea en tu navegador, emitido ahora y válido durante una hora. Está firmado con HS256 y el secreto de ejemplo devtools-sample-secret-not-for-production, y por eso se verifica. Ese secreto es público: no lo uses para nada real.
Firmar crea un token a partir del header y el payload que editas y de un secreto HMAC. Úsalo para pruebas y desarrollo local. Los tokens, secretos y claves que escribes se quedan en esta pestaña: no se envía, guarda ni registra nada.