Message d’erreur
"alg" parameter "ES256" requires curve "prime256v1".
Également affiché sous la forme
- "alg" parameter "ES384" requires curve "secp384r1".
- "alg" parameter "ES512" requires curve "secp521r1".
L’erreur est levée par `jwt.sign()` comme par `jwt.verify()`. La courbe requise est nommée selon la graphie d’OpenSSL : `prime256v1`, `secp384r1`, `secp521r1`.
jsonwebtoken (Node.js) — Error from jwt.sign() / jwt.verify() key validation (v9+)
Ce que cela signifie
La clé EC que vous avez passée est sur une autre courbe que celle qu’exige l’algorithme. Dans JOSE, chaque algorithme ECDSA est lié à une seule courbe : ES256 à P-256 (nom OpenSSL `prime256v1`), ES384 à P-384 (`secp384r1`), ES512 à P-521 (`secp521r1`). Depuis la version 9, jsonwebtoken vérifie la courbe de la clé par rapport à l’`alg` avant de signer ou de vérifier : une clé qui ne correspond pas est donc rejetée d’emblée, au lieu de produire des jetons qu’aucune autre bibliothèque n’accepte.
Pourquoi cela se produit
Une clé secp256k1 avec ES256
fréquentesecp256k1 (Bitcoin, Ethereum) est une autre courbe de 256 bits. Son algorithme JOSE est `ES256K` (RFC 8812), que jsonwebtoken ne prend pas en charge ; le « 256 » d’ES256 renvoie uniquement à SHA-256 et à P-256.
Une clé P-384 ou P-521 avec ES256
occasionnelleLes clés générées avec les paramètres par défaut d’OpenSSL, une spécification de clé de KMS cloud telle que `ECC_NIST_P384` ou la clé d’un certificat issu d’un profil d’AC peuvent utiliser une courbe plus grande. Choisissez l’algorithme qui correspond à la clé (ES384/ES512) ou générez une clé P-256.
Le mauvais fichier de clé a été chargé
occasionnellePlusieurs clés dans un même coffre de secrets, et le service lit celle qui est destinée à un autre usage : une clé TLS, une clé SSH, une clé de signature d’un autre système.
Comment corriger l’erreur
- 1.
Afficher la courbe de la clé
`asymmetricKeyDetails.namedCurve` indique la courbe selon la nomenclature d’OpenSSL. Comparez-la avec l’algorithme indiqué dans l’en-tête du jeton.
js import { createPublicKey } from "node:crypto"; const key = createPublicKey(pem); console.log(key.asymmetricKeyType, key.asymmetricKeyDetails); // ec { namedCurve: 'prime256v1' } - 2.
Déduire l’algorithme de la clé
Si vous utilisez des clés de tailles différentes, choisissez l’algorithme JWS d’après la courbe de la clé au lieu de coder ES256 en dur, et publiez le même `alg` dans votre JWKS.
js const ALG_BY_CURVE = { prime256v1: "ES256", secp384r1: "ES384", secp521r1: "ES512" }; const alg = ALG_BY_CURVE[key.asymmetricKeyDetails.namedCurve]; if (!alg) throw new Error("this curve has no JWS algorithm in jsonwebtoken"); const token = jwt.sign(claims, key, { algorithm: alg, expiresIn: "10m" }); - 3.
Générer une clé P-256 lorsque vous avez besoin d’ES256
ES256 est l’algorithme ECDSA le plus largement pris en charge par les bibliothèques JOSE ; une nouvelle paire de clés P-256 se génère en une seule commande.
bash openssl genpkey -algorithm EC -pkeyopt ec_paramgen_curve:P-256 -out es256-private.pem openssl pkey -in es256-private.pem -pubout -out es256-public.pem