Comment un JWT est fabriqué
Un JWT (RFC 7519) se construit en trois temps. L'en-tête et la charge utile, deux objets JSON, sont écrits sans espaces puis encodés en Base64url. On les joint par un point, et l'on calcule la signature sur ce texte avec la clé secrète. La signature, encodée elle aussi en Base64url, vient en troisième partie.
base64url(en-tête) + "." + base64url(charge utile)HMAC-SHA-256(clé, texte signé)texte signé + "." + base64url(signature)Le générateur reprend votre en-tête et y impose l'algorithme choisi : si vous écrivez "alg":"none" et choisissez HS384, le jeton annonce HS384. Il ajoute "typ":"JWT" si l'en-tête n'en a pas, et garde tous vos autres champs, comme kid.
Choisir la clé
La RFC 7518 demande une clé au moins aussi longue que la sortie du hachage : 32 octets pour HS256, 48 pour HS384, 64 pour HS512. Le calculateur affiche la longueur de votre clé et vous prévient si elle est trop courte.
| Algorithme | Clé minimale | Signature |
|---|---|---|
| HS256 | 32 octets | 43 caractères |
| HS384 | 48 octets | 64 caractères |
| HS512 | 64 octets | 86 caractères |
« Générer une clé » tire la longueur minimale de l'algorithme choisi avec le générateur cryptographique du navigateur, et l'écrit en Base64url (43 caractères pour 32 octets). Une phrase tapée au clavier, même longue, est bien moins imprévisible qu'une clé tirée au hasard.
Les dates iat et exp
Une date de JWT est un nombre de secondes depuis le 1er janvier 1970 à minuit UTC. Choisissez une durée puis « Insérer iat et exp » : iat prend l'instant présent, exp l'instant présent plus la durée. « Sans expiration » retire exp, et le jeton reste alors valable sans limite tant que la clé ne change pas. Une durée courte (quelques minutes à quelques heures) est l'usage le plus répandu pour un jeton d'accès : c'est une habitude de prudence, pas une règle de la RFC.
Trois exemples
En-tête {"alg":"HS256","typ":"JWT"}, charge utile{"sub":"42","name":"Jeanne","iat":1791709200,"exp":1791712800} (émis le 11 octobre 2026 à 11 h, heure de Paris, valable une heure), clé demo-lycos-cle-secrete-32-octets : le jeton se termine par MIk_sG8HLvPfzSWBbAUwB-WsI9X1_SmiAiHsevSGN4k.
Même charge utile et même clé : la signature passe à 64 octets, soit 86 caractères. Notez que la clé de 32 octets est alors trop courte pour HS512, et le calculateur le signale.
En HS256, « Générer une clé » donne 32 octets aléatoires, soit 43 caractères en Base64url. Le format de clé passe sur Base64 : c'est la forme sous laquelle votre serveur devra la lire.
Signé n'est pas chiffré
La signature empêche de modifier le jeton sans la clé, mais elle ne cache rien : collez votre jeton dans le décodeur JWT, la charge utile s'affiche en clair, sans clé. N'y mettez jamais de mot de passe ni de donnée que le porteur du jeton ne doit pas voir.
Questions fréquentes
Quelle longueur de clé pour HS256 ?
Au moins 32 octets (256 bits), la taille de la sortie de SHA-256 : c'est le minimum que fixe la RFC 7518. Comptez 48 octets pour HS384 et 64 pour HS512. Le bouton « Générer une clé » tire une clé de la bonne longueur au hasard.
La clé générée est-elle vraiment aléatoire ?
Oui : elle est tirée par le générateur cryptographique du navigateur (crypto.getRandomValues), puis écrite en Base64url. Elle n'est ni envoyée ni gardée : copiez-la avant de quitter la page.
À quoi servent iat et exp ?
iat (issued at) est la date d'émission du jeton, exp sa date d'expiration, toutes deux en secondes depuis le 1er janvier 1970 UTC. Un serveur qui respecte la RFC 7519 refuse un jeton dont la date exp est atteinte.
Puis-je utiliser ce jeton en production ?
Le jeton est correct et vérifiable par n'importe quelle bibliothèque JWT, mais un jeton de production se signe sur le serveur, avec une clé qui n'en sort jamais. Cet outil sert à tester, déboguer ou documenter.
Pourquoi ne pas proposer RS256 ?
Signer en RS256 ou ES256 demande une clé privée : la coller dans une page web, même sans envoi, est une mauvaise habitude. Le décodeur JWT vérifie en revanche ces signatures avec la clé publique.
Vérifié le 11 octobre 2026 sur nist.gov (FIPS 198-1, HMAC).
Une erreur ? Signalez-la, nous la corrigeons.