MiServe DevTools

Vos autocollants

Épinglez vos outils ici. Ils sont enregistrés dans ce navigateur.

Décodeur JWT, vérification et signature

Décodez un JSON Web Token, lisez ses claims et sa date d'expiration, vérifiez la signature avec un secret ou une clé publique, et signez des tokens HMAC.

S'exécute dans votre navigateur. Rien de ce que vous collez n'est envoyé.

À 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.

Questions

Est-il sûr de coller un JWT ici ?

Le token est décodé et vérifié par JavaScript dans votre navigateur et n'est pas envoyé à un serveur. Malgré tout, un token non expiré permet réellement de s'authentifier : méfiez-vous de tout outil qui vous en demande un, et préférez des tokens expirés ou de test.

Tout le monde peut-il lire le contenu d'un JWT ?

Oui. L'en-tête et le payload sont du JSON encodé en Base64URL, non chiffré : quiconque possède le token peut les lire sans clé. La signature ne cache rien : elle montre seulement que le token a été créé par quelqu'un qui détient la clé de signature et qu'il n'a pas été modifié ensuite.

Quelle est la différence entre HS256 et RS256 ?

HS256 utilise un seul secret partagé pour signer et pour vérifier : chaque partie qui vérifie pourrait donc aussi créer des tokens. RS256 utilise une clé privée pour signer et une clé publique pour vérifier, ce qui permet à de nombreux services de vérifier des tokens que seul l'émetteur peut créer.

Pourquoi mon token apparaît-il comme expiré ?

Son claim exp désigne un moment déjà passé selon l'horloge de votre appareil. Certains serveurs tolèrent un léger décalage d'horloge, mais un token expiré doit être remplacé, en se reconnectant ou en utilisant un refresh token.

Autres outils de la catégorie Encodage