Mode d’emploi
- Choisissez HS256, HS384 ou HS512.
- Modifiez les revendications de la charge utile, puis cliquez sur « Définir iat et exp » pour ajouter l’heure actuelle et une expiration.
- Saisissez un secret de test ou générez-en un aléatoire de 256 bits.
- Copiez le jeton signé. Pour vérifier un jeton, passez à « Vérifier la signature », collez-le et saisissez le secret.
Fonctionnement
Un JSON Web Token (RFC 7519) comporte trois parties encodées en Base64URL : un en-tête, une charge utile contenant les revendications et une signature. Avec les algorithmes HMAC HS256, HS384 et HS512, la signature est un HMAC avec SHA-256, SHA-384 ou SHA-512 sur « header.payload », utilisant un secret partagé comme clé. Toute personne disposant du secret peut créer et vérifier des jetons.
L’outil sérialise l’en-tête et la charge utile en JSON compact, les encode et les signe avec crypto.subtle, l’API Web Crypto intégrée à votre navigateur. Le champ alg de l’en-tête correspond toujours à l’algorithme choisi, typ vaut JWT par défaut et tous les autres champs d’en-tête, comme kid, sont conservés. « Définir iat et exp » écrit l’heure actuelle dans iat (issued at) et ajoute la durée de vie choisie dans exp, toutes deux en secondes depuis le 1er janvier 1970 UTC. Le résultat correspond à celui d’autres bibliothèques JWT ; par exemple, le jeton d’exemple classique de jwt.io est reproduit exactement.
Le secret peut être du texte brut (ses octets UTF-8 servent de clé) ou des octets encodés en Base64/Base64URL, ce que de nombreux frameworks utilisent. Le bouton de secret aléatoire crée 32 octets aléatoires avec crypto.getRandomValues. Pour HS256, utilisez au moins 32 octets aléatoires ; des secrets courts choisis par des humains peuvent être devinés hors ligne à partir de n’importe quel jeton.
La vérification décode le jeton, contrôle qu’il utilise un algorithme HMAC et recalcule la signature avec crypto.subtle.verify. Elle indique également quand exp ou nbf signifient que le jeton est expiré ou pas encore valide. RS256, ES256 et les autres algorithmes à clé publique ne sont pas pris en charge, et la vérification effectuée ici ne contrôle ni l’émetteur, ni l’audience, ni les autres revendications que votre application peut exiger.
Exemples
Tester une API localement
Votre serveur de développement attend des jetons HS256 signés avec « dev-secret-change-me ». Définissez sub sur un ID d’utilisateur de test, cliquez sur « Définir iat et exp » avec 1 heure, saisissez le secret et envoyez le jeton dans un en-tête Authorization: Bearer.
Vérifier quel secret a signé un jeton
Un jeton de préproduction est rejeté. Collez-le dans « Vérifier la signature » et essayez le secret de préproduction : « Signature non valide » indique que le jeton a été signé avec un autre secret ou que le secret est dans un format différent (texte ou Base64).
Reproduire l’exemple de jwt.io
Avec l’en-tête {"alg":"HS256","typ":"JWT"}, la charge utile {"sub":"1234567890","name":"John Doe","iat":1516239022} et le secret « your-256-bit-secret », le jeton se termine par SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c, comme sur jwt.io.
Foire aux questions
Mon secret est-il envoyé à votre serveur ?
Non. La signature et la vérification s’exécutent avec la Web Crypto API dans votre navigateur, et le secret n’est ni stocké ni envoyé où que ce soit. Nous recommandons tout de même de n’utiliser que des secrets de test, car un vrai secret de signature ne doit jamais être saisi sur un site Web.
Pourquoi la signature est-elle invalide alors que le secret est correct ?
Vérifiez le format du secret. Certains systèmes utilisent le texte du secret, d’autres le décodent d’abord depuis Base64, ce qui donne des octets de clé différents. Vérifiez aussi que le jeton n’a pas été modifié et qu’il utilise le même algorithme.
Puis-je créer des jetons RS256 ou ES256 ?
Pas avec cet outil. Il ne prend en charge que les algorithmes HMAC à secret partagé HS256, HS384 et HS512.
La charge utile est-elle chiffrée ?
Non. Un JWT signé est seulement encodé ; n’importe qui peut le décoder et lire la charge utile. La signature prouve uniquement qu’il n’a pas été modifié. Ne mettez pas de mots de passe ni d’autres secrets dans la charge utile.
Confidentialité
Les jetons sont créés et vérifiés uniquement dans votre navigateur avec la Web Crypto API. L’en-tête, la charge utile, le jeton et le secret ne sont ni téléversés, ni stockés, ni inclus dans les données d’analyse.