À propos de cet outil
Qu'est-ce qu'un JWT ?
Un JSON Web Token signé (RFC 7519) est formé de trois chaînes Base64URL reliées par des points : un en-tête, un payload et une signature. L'en-tête indique comment le token est signé (alg). Le payload est un objet JSON de claims, des affirmations comme le sujet du token (sub), son émetteur (iss) et sa date d'expiration (exp). La signature est calculée sur les deux premières parties.
Décoder n'est pas vérifier. L'en-tête et le payload sont seulement encodés, pas chiffrés : quiconque détient un token peut le lire, comme le fait cette page sans aucune clé, et n'importe qui peut écrire un token avec les claims de son choix. Ne mettez jamais de secret dans le payload d'un JWT, et ne vous fiez jamais à un claim avant d'avoir vérifié la signature.
Vérifier la signature
HS256, HS384 et HS512 sont des HMAC : le même secret signe et vérifie, donc quiconque peut vérifier peut aussi falsifier. RS256, PS256 et ES256, ainsi que leurs variantes 384 et 512, sont asymétriques : l'émetteur signe avec une clé privée, et vous vérifiez avec la clé publique, souvent publiée sous forme de JWK Set à l'adresse jwks_uri de l'émetteur.
Collez le secret, ou la clé publique en PEM, sous forme de certificat X.509 ou de JWK. La vérification est effectuée par l'API Web Crypto de votre navigateur. Le résultat est l'un de ces trois cas : la signature est valide, elle est invalide, ou elle n'a pas pu être vérifiée. Dans ce dernier cas, la page en donne la raison : il n'y a pas de clé, la clé n'a pas le bon type ou la bonne courbe, l'algorithme n'est pas pris en charge, ou l'en-tête indique "alg": "none", ce qui signifie que le token n'est pas signé du tout.
Une signature valide est nécessaire, mais pas suffisante. Un vrai service doit aussi vérifier l'expiration, l'émetteur et l'audience, et décider lui-même quel algorithme il accepte au lieu de se fier à l'en-tête du token.
Les dates, le token d'exemple et la signature
exp, nbf et iat sont des timestamps Unix en secondes. Le tableau des claims les affiche comme des dates dans votre fuseau horaire, et le badge au-dessus indique si le token est expiré, pas encore valide, ou combien de temps il reste valide, selon l'horloge de votre appareil.
La page s'ouvre avec un token d'exemple créé dans votre navigateur, émis à l'instant et valide une heure. Il est signé en HS256 avec le secret d'exemple devtools-sample-secret-not-for-production, c'est pourquoi sa signature est valide. Ce secret est public : ne l'utilisez pour rien de réel.
Signer construit un token à partir de l'en-tête et du payload que vous modifiez et d'un secret HMAC. Utilisez-le pour les tests et le développement local. Les tokens, secrets et clés que vous saisissez restent dans cet onglet : rien n'est envoyé, conservé ni écrit dans un log.