Skip to main content
Sécurité informatique26 juillet 20269 min read

Qu'est-ce qu'un jeton JWT ? Pratiques de sécurité et meilleures pratiques

Rudra Chauhan, Senior Systems Architect

Qu'est-ce qu'un jeton JWT ? Pratiques de sécurité et meilleures pratiques

Qu'est-ce qu'un jeton JWT ? Pratiques de sécurité et meilleures pratiques

Les jetons Web JSON (JWT) spécifiés dans RFC 7519 sont une méthode standard ouverte et industrielle pour représenter des revendications de manière sécurisée entre deux parties. Les JWT sont largement utilisés pour l'authentification sans état dans les API REST, les microservices et les applications de page unique (SPAs).

Cependant, une mise en œuvre incorrecte de la vérification des JWT peut introduire des vulnérabilités d'authentification critique.

Anatomie d'un jeton JWT

Une chaîne de jeton JWT est composée de trois parties encodées en base64url séparées par des points (.) :

EN-TÊTE . REVENDICATIONS . SIGNATURE

Exemple :

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

1. En-tête

Contient le type de jeton et l'algorithme de signature :

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

2. Revendications (Revendications)

Contient des déclarations sur une entité (généralement l'utilisateur) et des métadonnées supplémentaires :

  • sub (Sujet) : ID de l'utilisateur
  • iat (Émis à) : Heure de création
  • exp (Expiration) : Heure d'expiration
  • iss (Émetteur) : URL de l'identifiant de l'émetteur

3. Signature

Créée en prenant l'en-tête encodé, les revendications encodées, une clé secrète et en signant avec l'algorithme spécifié.

Structure des revendications JWT

json
{
  "iss": "https://example.com",
  "sub": "1234567890",
  "iat": 1643723900,
  "exp": 1643723900,
  "aud": "https://example.com/api/v1",
  "jti": "1234567890",
  "name": "John Doe",
  "email": "john.doe@example.com",
  "roles": ["admin", "modérateur"]
}

Génération de la signature JWT

bash
echo -n '{"alg":"HS256","typ":"JWT"}' | base64
echo -n '{"iss":"https://example.com","sub":"1234567890","iat":1643723900,"exp":1643723900,"aud":"https://example.com/api/v1","jti":"1234567890","name":"John Doe","email":"john.doe@example.com","roles":["admin","modérateur"]}' | base64
clé_secrète="votre_clé_secrète_ici"
signature=$(echo -n "$(base64 -d <<< "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9")$(base64 -d <<< "eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ")" | openssl dgst -sha256 -hmac "$clé_secrète" -binary | base64 -w 0)

2. Signature symétrique (HS256) vs signature asymétrique (RS256)

CaractéristiqueHMAC SHA-256 (HS256)RSA SHA-256 (RS256)
Type de cléClé secrète partagée (symétrique)Paire de clés publique/privée (asymétrique)
SignatureEffectuée avec la clé secrèteEffectuée avec la clé privée
VérificationEffectuée avec la clé secrèteEffectuée avec la clé publique
Meilleur pourBack-ends monolithiques où un seul serveur émet et vérifieMicroservices / API distribuées / OAuth2

3. Vulnérabilités JWT courantes à éviter

1. La vulnérabilité "alg: none"

Certaines bibliothèques mal écrites acceptent des jetons où alg est défini sur none, ce qui permet de contourner la validation de la signature. Imposez toujours explicitement les algorithmes autorisés dans le middleware du serveur.

2. Attaque de confusion d'algorithme (HS256 vs RS256)

Si un serveur attend RS256 (asymétrique) mais reçoit HS256, un attaquant peut signer le jeton en utilisant la clé publique du serveur comme clé secrète. Vérifiez l'algorithme du jeton avant l'évaluation de la signature.

3. Manque de vérification d'expiration (exp)

Les jetons sans expiration vivent éternellement. Imposez toujours une durée de vie courte (par exemple, 15 minutes) pour les jetons d'accès et utilisez la rotation de jetons de refresh.

4. Outils de développement sur Teksolvr

Inspectez et déboguez les jetons de manière sécurisée avec les outils Teksolvr :

5. Exemples d'utilisation

  • Authentification : Utilisez les JWT pour l'authentification sans état dans les API REST, les microservices et les applications de page unique (SPAs).
  • Autorisation : Utilisez les JWT pour stocker les rôles et les permissions de l'utilisateur, permettant un contrôle d'accès fin.

6. Pratiques de sécurité

  • Utilisez HTTPS pour prévenir l'interception et la modification des jetons.
  • Imposez des jetons d'accès et des jetons de refresh à durée de vie courte.
  • Utilisez un générateur de nombres aléatoires sécurisé pour générer les clés secrètes.
  • Implémentez la liste noire des jetons pour prévenir la réutilisation des jetons.
  • Rotez régulièrement les clés secrètes et les jetons de refresh.

7. Références

  • RFC 7519 : Jetons Web JSON (JWT)
  • RFC 7515 : Signature Web JSON (JWS)
  • RFC 7516 : Chiffrement Web JSON (JWE)

8. Crédits d'image

  • Nom du diagramme

    Nom du diagramme

9. Liste de vérification de dépannage

  • Vérifiez la signature et l'algorithme du jeton.
  • Vérifiez l'expiration et la rotation des jetons de refresh.
  • Assurez-vous d'un générateur de nombres aléatoires sécurisé pour la génération des clés secrètes.
  • Implémentez la liste noire des jetons pour prévenir la réutilisation des jetons.

10. FAQ

  • Q : Qu'est-ce qu'un jeton JWT ? A : Un jeton JWT est un objet JSON qui contient des revendications, une signature et un en-tête.
  • Q : Quelle est la différence entre la signature symétrique et la signature asymétrique ? A : La signature symétrique utilise une clé secrète partagée, tandis que la signature asymétrique utilise une paire de clés publique/privée.
  • Q : Comment prévenir la vulnérabilité "alg: none" ? A : Imposez toujours explicitement les algorithmes autorisés dans le middleware du serveur.

11. Conclusion

Les Jetons Web JSON (JWT) sont une méthode largement utilisée pour représenter des revendications de manière sécurisée entre deux parties. Cependant, une mise en œuvre incorrecte de la vérification des JWT peut introduire des vulnérabilités d'authentification critique. En suivant les pratiques de sécurité et les meilleures pratiques, telles que l'utilisation de HTTPS, l'imposition de jetons d'accès et de jetons de refresh à durée de vie courte et l'implémentation de la liste noire des jetons, vous pouvez assurer un usage sécurisé et fiable des jetons JWT dans vos applications.

Ce guide vous a-t-il été utile ?

Vous dépannez ou testez ce guide ?

Teksolvr propose 97 outils gratuits pour inspecter les configurations DNS, valider les certificats DKIM, tester les ports ouverts, vérifier les listes noires de serveurs et effectuer des calculs.