đŸŽ«
← Retour aux guides

Comment vérifier les signatures JWT : HS256, RS256 et ES256

· Tags: jwt-verification, jwt-signature, hs256, rs256, token-validation

Comment vérifier les signatures JWT

Un JWT transporte ses revendications en texte clair. La seule chose qui empĂȘche la falsification est la signature. Sans vĂ©rification, un attaquant peut fabriquer des jetons arbitraires et usurper l'identitĂ© de n'importe quel utilisateur. Ce guide couvre les trois algorithmes de signature JWT les plus courants et comment vĂ©rifier chacun d'eux.

Le processus de vérification

Quel que soit l'algorithme, la vĂ©rification de la signature JWT suit les mĂȘmes Ă©tapes :

  1. Divisez le jeton sur . pour extraire le header, le payload et la signature.
  2. Décodez le header en base64url pour lire le champ alg.
  3. Recalculez la signature à partir du header et du payload à l'aide de l'algorithme et de la clé.
  4. Comparez la signature recalculée avec la signature du jeton.
  5. S'ils correspondent, le jeton est authentique.

HS256 (HMAC-SHA256)

HS256 est un algorithme symĂ©trique — la mĂȘme clĂ© secrĂšte crĂ©e et vĂ©rifie la signature.

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

Pour vérifier, recalculez le HMAC avec la clé secrÚte partagée et comparez :

Token:   header.payload.sig
Secret:  "my-shared-secret"

1. Compute: HMACSHA256("header.payload", "my-shared-secret")
2. Compare: computedSignature === sig

ConsidĂ©rations de sĂ©curitĂ© : La clĂ© secrĂšte doit ĂȘtre confidentielle, renouvelĂ©e pĂ©riodiquement et possĂ©der au moins 256 bits d'entropie. HS256 n'est pas idĂ©al pour les architectures de microservices oĂč de nombreux services ont besoin de la clĂ© secrĂšte partagĂ©e.

RS256 (RSA-SHA256)

RS256 est asymétrique. L'émetteur signe avec une clé privée ; les vérificateurs contrÎlent avec la clé publique correspondante.

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

Pour vérifier, utilisez la clé publique :

Token:   header.payload.sig
Public:  "-----BEGIN PUBLIC KEY-----..."

1. Load the RSA public key
2. Verify: RSA_SHA256_verify("header.payload", sig, publicKey)

Avantages : Les clĂ©s de signature et de vĂ©rification sont sĂ©parĂ©es. N'importe quel service peut vĂ©rifier sans dĂ©tenir de secret. Les clĂ©s publiques peuvent ĂȘtre fournies depuis un point de terminaison JWKS pour un renouvellement facile.

ES256 (ECDSA-SHA256)

ES256 utilise ECDSA avec la courbe P-256. Comme RS256, il est asymétrique.

signature = ECDSA_SHA256(
  base64urlEncode(header) + "." + base64urlEncode(payload),
  privateKey
)

La vérification utilise la clé publique ECDSA P-256. ES256 produit des signatures beaucoup plus petites (64 octets contre 256 octets pour RSA-2048) et offre une vérification plus rapide.

Comparaison des algorithmes

| Propriété | HS256 | RS256 | ES256 | |----------|-------|-------|-------| | Type de clé | Symétrique (clé secrÚte partagée) | Asymétrique (paire RSA) | Asymétrique (paire EC) | | Taille de la signature | 32 octets | 256 octets | 64 octets | | Distribution des clés | Partagée secrÚtement | La clé publique est publique | La clé publique est publique | | Renouvellement | Modéré | Facile (JWKS) | Facile (JWKS) | | Cas d'utilisation | SystÚmes internes de confiance | API distribuées | Mobile, IoT |

PiÚges courants de la vérification

  • Attaque par confusion d'algorithme. Si votre code lit alg depuis le jeton sans le vĂ©rifier, un attaquant peut changer l'algorithme. Validez toujours que l'algorithme correspond Ă  la valeur attendue.
  • Accepter alg: "none". Certaines bibliothĂšques acceptent les jetons non signĂ©s. Rejetez explicitement alg: "none".
  • Troncation de la signature. Une comparaison non constante dans le temps peut fuiter des informations via des attaques temporelles (timing attacks). Utilisez la comparaison intĂ©grĂ©e de votre bibliothĂšque JWT.

Vérifiez les jetons JWT en ligne

Utilisez l'outil de décodage JWT pour décoder et valider n'importe quel jeton. Collez le jeton, visualisez le header et le payload, et vérifiez la signature en fournissant la clé secrÚte ou publique appropriée. Tout le traitement s'effectue dans votre navigateur.

Comment vérifier les signatures JWT : HS256, RS256 et ES256 - CoolTool