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

Message d’erreur

secretOrPublicKey must be an asymmetric key when using ES256

Ce que cela signifie

Vous avez demandé à jsonwebtoken de vérifier (ou de signer – le message jumeau mentionne alors secretOrPrivateKey) un jeton ES256, mais le matériel de clé que vous avez fourni est un secret symétrique : une simple chaîne ou un Buffer qui n’est ni un PEM ni un KeyObject. ES256 est ECDSA sur P-256 : il lui faut une paire de clés EC, pas un secret partagé.

Pourquoi cela se produit

Comment corriger l’erreur

  1. 1.

    Charger une véritable clé publique EC

    Vérifiez ES256 avec un PEM (SPKI) ou un KeyObject. Si vous disposez d’une JWK (provenant par exemple d’un point de terminaison JWKS), convertissez-la d’abord avec node:crypto.

    js
    import { createPublicKey } from "node:crypto";
    
    const key = createPublicKey({ key: jwk, format: "jwk" }); // or a PEM string
    jwt.verify(token, key, { algorithms: ["ES256"] });
  2. 2.

    Résoudre les clés JWKS avec un utilitaire

    Si votre émetteur publie ses clés à une URL JWKS, ne passez pas l’URL en guise de clé : résolvez la clé pour chaque jeton d’après son kid.

    js
    import { createRemoteJWKSet, jwtVerify } from "jose";
    
    const jwks = createRemoteJWKSet(new URL("https://issuer.example/.well-known/jwks.json"));
    const { payload } = await jwtVerify(token, jwks, { algorithms: ["ES256"] });
  3. 3.

    Ou bien : vous vouliez en fait HS256

    Si l’émetteur et le vérificateur sont tous deux votre propre service et qu’un secret partagé est voulu, définissez algorithm: "HS256" des deux côtés au lieu d’ES256. Mélanger les deux familles, c’est précisément ce que cette erreur empêche, y compris dans le scénario classique d’attaque par confusion de clés.

Erreurs associées

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