Anatomie d’un JWT : en-tête, charge utile, signature
Décodez les parties en base64url et comprenez chaque champ d’un JWT.
Anatomie d’un JWT : en-tête, charge utile, signature est une leçon Cryptology Academy gratuite sur CoddyKit. Ceci est la leçon 1 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Cryptology Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Cryptology Academy comprend 4 leçons au total.
Qu’est-ce qu’un JWT ?
Un JSON Web Token (JWT) est un format compact de jeton compatible avec les URL, défini dans la RFC 7519. Il encode des revendications (assertions concernant un sujet) et une signature cryptographique dans une seule chaîne, ce qui permet une authentification sans état.
Structure en trois parties
Un JWT a la forme suivante : base64url(header).base64url(payload).base64url(signature). Le point sépare les parties. L’en-tête et la charge utile sont lisibles (base64url, et non chiffrés). Seule la signature est cryptographique.
En-tête
L’en-tête est un objet JSON : {"alg":"HS256","typ":"JWT"}. alg indique l’algorithme de signature (HS256, RS256, ES256, none). typ vaut toujours "JWT". D’autres en-têtes peuvent inclure kid (ID de clé) pour sélectionner la clé.
Charge utile / revendications
Revendications enregistrées standard : iss (émetteur), sub (sujet), aud (audience), exp (horodatage Unix d’expiration), nbf (pas avant), iat (émis le), jti (ID du JWT pour la révocation). Les revendications personnalisées sont toutes les paires clé-valeur supplémentaires.
Décoder un JWT
import base64, json token = "eyJ..." parts = token.split(".") header = json.loads(base64.urlsafe_b64decode(parts[0]+"==")) payload = json.loads(base64.urlsafe_b64decode(parts[1]+"==")) print(header, payload)
Vérification des signatures
Pour HS256 : HMAC-SHA256(base64url(header)+"."+base64url(payload), secret). Le récepteur recalcule cette valeur et la compare à la partie de signature. Si les valeurs correspondent et que le jeton n’a pas expiré, il est valide.
Signatures asymétriques
Pour RS256 : la clé privée signe la chaîne header.payload à l’aide de RSA-SHA256. Toute personne possédant la clé publique peut effectuer la vérification sans la clé privée. Les clés publiques sont distribuées via des points de terminaison JWKS (JSON Web Key Set), par exemple /.well-known/jwks.json.
Encodage Base64url
Base64url remplace + par - et / par _, et omet le remplissage avec =. Les JWT peuvent ainsi être utilisés dans les URL, les en-têtes HTTP et les cookies sans encodage en pourcentage. Les octets bruts ne sont toujours pas chiffrés : ils sont seulement encodés.
Les JWT ne sont pas chiffrés par défaut
La charge utile d’un JWT est visible par toute personne qui la décode avec base64url. Ne placez jamais de secrets (mots de passe, numéros de sécurité sociale) dans une charge utile JWT, sauf si vous utilisez JWE (chiffrement Web JSON) avec l’algorithme "enc" pour effectuer un véritable chiffrement.
Durée de validité du jeton
Définissez exp sur une durée courte (15 à 60 minutes pour les jetons d’accès). Les JWT de longue durée présentent un risque croissant : s’ils sont volés, ils restent valides jusqu’à leur expiration. Utilisez des jetons d’actualisation (stockés de manière sécurisée) pour émettre de nouveaux jetons d’accès de courte durée.
Découverte de JWKS
Les fournisseurs d’authentification (Auth0, Keycloak, Google) publient une URL JWKS. Le vérificateur récupère les clés publiques selon kid, les met en cache et vérifie les signatures sans contacter l’émetteur à chaque requête. La rotation des clés met à jour le point de terminaison JWKS.
Vérification rapide
Quelle partie d’un JWT contient la signature cryptographique ?
Récapitulatif
Un JWT se compose de trois parties JSON encodées en base64url : l’en-tête (algorithme), la charge utile (revendications) et la signature. La charge utile est lisible, et non chiffrée. Ensuite : choisir entre HS256 et RS256.
Questions Fréquemment Posées
La leçon « Anatomie d’un JWT : en-tête, charge utile, signature » est-elle gratuite ?
Oui — le texte complet de « Anatomie d’un JWT : en-tête, charge utile, signature » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Cryptology Academy, passe à CoddyKit PRO. Le cours Cryptology Academy comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Anatomie d’un JWT : en-tête, charge utile, signature » ?
Décodez les parties en base64url et comprenez chaque champ d’un JWT. Tu pratiques Cryptology Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer Cryptology Academy ?
Aucune expérience préalable n'est requise. Cryptology Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 1 sur 4.
Combien de temps prend la leçon « Anatomie d’un JWT : en-tête, charge utile, signature » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon Cryptology Academy ?
Oui. Chaque leçon Cryptology Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Anatomie d’un JWT : en-tête, charge utile, signature
- HS256 ou RS256 : JWT symétriques ou asymétriques
- Vulnérabilités des JWT : alg=none et confusion de clés
- Bonnes pratiques pour une implémentation sécurisée des JWT