đŸŽ«
← Retour aux guides

Structure du jeton JWT expliquée : Header, Payload et Signature

· Tags: jwt-structure, jwt-header, jwt-payload, jwt-signature, json-web-token

Structure du jeton JWT expliquée

Chaque JSON Web Token (JWT) est une chaßne compacte et sûre pour les URL qui transporte des revendications entre deux parties. Comprendre sa structure interne est essentiel pour tout développeur travaillant avec la sécurité basée sur les jetons.

Les trois parties d'un JWT

Un JWT se compose de trois parties séparées par des points (.) :

header.payload.signature

Exemple :

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

Chaque partie est un JSON encodĂ© en base64url. Un JWT est signĂ©, pas chiffrĂ© — n'importe qui peut le dĂ©coder et lire son contenu.

Partie 1 : Le Header

Le header contient les mĂ©tadonnĂ©es du jeton — l'algorithme de signature et le type de jeton.

| Champ | Description | Exemples de valeurs | |-------|-------------|----------------| | alg | Algorithme de signature (obligatoire) | HS256, RS256, ES256 | | typ | Type de jeton (facultatif) | JWT | | kid | Identifiant de clé (facultatif) | "key-1" |

{
  "alg": "HS256",
  "typ": "JWT"
}

Le champ alg indique au vĂ©rificateur quel algorithme a créé la signature. Une discordance d'algorithme — ou l'acceptation de alg: "none" — est une vulnĂ©rabilitĂ© de sĂ©curitĂ© JWT courante.

Partie 2 : Le Payload

Le payload contient des revendications sur l'utilisateur et des métadonnées. Les revendications se répartissent en trois catégories :

Revendications enregistrées

| Revendication | Nom complet | But | |-------|-----------|---------| | iss | Émetteur | Qui a Ă©mis le jeton | | sub | Sujet | Identifie l'utilisateur | | aud | Audience | Destinataire prĂ©vu | | exp | Expiration | Horodatage d'expiration du jeton | | nbf | Pas avant | Jeton non valide avant cette heure | | iat | Émis Ă  | Horodatage de crĂ©ation du jeton | | jti | ID JWT | Identifiant unique du jeton |

Exemple de payload décodé

{
  "sub": "1234567890",
  "name": "John Doe",
  "iat": 1516239022,
  "exp": 1516242622,
  "iss": "https://auth.example.com"
}

Les revendications publiques sont définies dans le registre IANA ou utilisent des URI résistantes aux collisions. Les revendications privées sont des revendications personnalisées convenues entre l'émetteur et le consommateur.

Partie 3 : La Signature

La signature est créée en combinant le header encodé, le payload encodé et une clé secrÚte à l'aide de l'algorithme du header. Elle remplit deux objectifs :

  1. IntĂ©gritĂ© — confirme que le jeton n'a pas Ă©tĂ© modifiĂ© aprĂšs la signature.
  2. Authentification — prouve que le jeton a Ă©tĂ© signĂ© par la partie attendue.

Création de la signature HS256

HMACSHA256(
  base64urlEncode(header) + "." + base64urlEncode(payload),
  secret
)

Création de la signature RS256

RSASHA256(
  base64urlEncode(header) + "." + base64urlEncode(payload),
  privateKey
)

Base64url vs Base64 standard

| Aspect | Base64 standard | Base64url | |--------|-----------------|-----------| | CaractĂšre 62 | + | - | | CaractĂšre 63 | / | _ | | Remplissage | = | Omis |

Cet encodage garantit que les JWT sont sĂ»rs pour les headers HTTP, les paramĂštres de requĂȘte et les chemins d'URL, sans encodage en pourcentage.

Processus complet de création d'un JWT

  1. Créez le JSON du header et encodez-le en base64url.
  2. Créez le JSON du payload et encodez-le en base64url.
  3. Concaténez avec un séparateur ..
  4. Signez avec l'algorithme et la clé secrÚte choisis.
  5. Encodez la signature en base64url.
  6. Concaténez les trois parties avec des séparateurs ..

Considérations de sécurité

  • Ne stockez jamais de secrets dans le payload. Le payload est encodĂ©, pas chiffrĂ©.
  • Validez toujours la signature. Sans vĂ©rification, n'importe qui peut falsifier des jetons.
  • VĂ©rifiez le header alg. Rejetez alg: "none" et les tentatives de rĂ©trogradation d'algorithme.
  • DĂ©finissez des durĂ©es d'expiration courtes. Utilisez des revendications exp en minutes ou en heures, pas en mois.

Décodez un jeton JWT en ligne

Utilisez l'outil de décodage JWT pour examiner n'importe quel jeton. Collez-le et voyez instantanément le header, le payload et l'algorithme de signature décodés. Tout le traitement s'effectue dans votre navigateur.

Structure du jeton JWT expliquée : Header, Payload et Signature - CoolTool