Aller au contenu
ecdsa.com
jsonwebtoken (Node.js)Bibliothèques JWT

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

Comment corriger l’erreur

  1. 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. 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. 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

Erreurs associées

Parcourir toute la base de données des erreurs de signature