Vérificateur JWT
Vérifiez si un JSON Web Token est authentique et toujours valide. Collez le jeton avec son secret HMAC, une clé publique PEM, un certificat, une JWK ou un JWKS complet. Le vérificateur contrôle la signature avec la bibliothèque jose, compare exp et nbf à l'heure actuelle en tenant compte d'une éventuelle tolérance d'horloge et affiche un verdict clair à côté de l'en-tête et des revendications décodés. Les jetons avec alg none sont refusés.
Foire aux questions
Que vérifie le vérificateur ?
Il vérifie la signature à l'aide de la clé que vous fournissez, puis compare les revendications exp et nbf à l'heure actuelle. Le verdict est valide uniquement si la signature correspond et qu'aucune des deux vérifications temporelles n'échoue. Les revendications telles que iss, aud ou sub sont affichées dans la charge utile, mais ne sont pas comparées à des valeurs attendues.
Quelles clés puis-je coller ?
Pour HS256, HS384 et HS512, collez le secret partagé sous forme de texte ou de JWK oct. Pour les jetons RSA, EC et EdDSA, collez une clé publique PEM (SPKI ou PKCS #1), un X.509 certificat, un JWK public ou privé, un JWKS contenant jusqu’à 50 clés, ou une clé privée PEM, dont seule la partie publique est utilisée.
Comment la bonne clé est-elle choisie dans un JWKS ?
Si l’en-tête du jeton contient un kid, la clé portant le même kid dans l’ensemble est utilisée ; si aucune clé ne correspond, une erreur indique le kid. En l’absence de kid, l’ensemble doit contenir exactement une clé. Cela correspond à la manière dont la plupart des serveurs sélectionnent les clés dans un document jwks_uri.
À quoi sert l’option d’algorithme ?
Avec l’option Use the token's alg, l’algorithme provient de l’en-tête du jeton, mais la clé doit toujours lui correspondre : une clé publique RSA ne peut donc jamais servir de secret HMAC. Choisissez un algorithme précis pour exiger également que le jeton l’utilise, comme un serveur devrait le faire pour imposer l’algorithme attendu. Un jeton utilisant un autre algorithme est alors rejeté, les deux noms étant indiqués.
Pourquoi un jeton avec alg none est-il refusé ?
Un jeton avec alg none ne comporte aucune signature : il n’y a donc rien à vérifier et n’importe qui aurait pu le créer. Accepter de tels jetons constitue une vulnérabilité bien connue dans les bibliothèques JWT. Le vérificateur signale une erreur au lieu de renvoyer un résultat valide.
Comment fonctionnent exp, nbf et la tolérance d’horloge ?
Un jeton est considéré comme expiré lorsque exp est inférieur ou égal à l’heure actuelle, et comme pas encore valide lorsque nbf est postérieur à l’heure actuelle. La tolérance d’horloge, de 0 à 3600 secondes, élargit ces deux vérifications pour tenir compte des écarts d’horloge entre serveurs. Les revendications présentes mais non numériques rendent le jeton invalide.
Que signifie une signature invalide ?
Le jeton n’a pas été signé avec la clé fournie, ou son en-tête ou sa charge utile a été modifié après la signature. Vérifiez que vous avez collé la clé publique ou le secret correspondant, avec ses caractères exacts, et que le jeton a été copié en entier. L’en-tête et la charge utile décodés restent affichés pour vous permettre de les comparer.
Quels algorithmes sont pris en charge ?
HS256, HS384, HS512, RS256, RS384, RS512, PS256, PS384, PS512, ES256, ES384, ES512 et EdDSA avec des clés Ed25519. Les clés RSA doivent comporter au moins 2048 bits. Les jetons chiffrés (JWE) ne sont pas déchiffrés.
Le jeton ou la clé sont-ils enregistrés ?
Non. Le jeton et la clé sont utilisés uniquement en mémoire pour cette vérification et ne sont jamais consignés ni enregistrés. Une clé publique peut être partagée sans risque, mais protégez vos secrets HMAC et renouvelez tout secret dont vous soupçonnez la fuite.
Quelle peut être la taille maximale du jeton et de la clé ?
Les jetons peuvent contenir jusqu’à 65,536 caractères, et le champ de clé jusqu’à 262,144 caractères, ce qui permet d’utiliser de grands documents JWKS. Le jeton doit comporter trois parties base64url séparées par des points, un en-tête JSON avec un membre alg et un objet JSON comme charge utile.