Zum Inhalt springen
ecdsa.com
jsonwebtoken (Node.js)JWT-Bibliotheken

Fehlermeldung

secretOrPublicKey must be an asymmetric key when using ES256

Was der Fehler bedeutet

Du hast jsonwebtoken ein ES256-Token prüfen lassen (oder signieren – die Schwestermeldung nennt secretOrPrivateKey), aber das übergebene Schlüsselmaterial ist ein symmetrisches Secret: ein einfacher String oder Buffer, der kein PEM/KeyObject ist. ES256 ist ECDSA auf P-256 und braucht ein EC-Schlüsselpaar, kein gemeinsames Geheimnis.

Warum der Fehler auftritt

So behebst du den Fehler

  1. 1.

    Echten öffentlichen Schlüssel vom Typ EC laden

    Prüfe ES256 mit einem PEM (SPKI) oder einem KeyObject. Hast du einen JWK – zum Beispiel von einem JWKS-Endpunkt –, konvertiere ihn zuerst mit 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.

    JWKS-Schlüssel mit einer Hilfsfunktion auflösen

    Veröffentlicht dein Aussteller seine Schlüssel unter einer JWKS-URL, übergib nicht die URL als Schlüssel – löse den Schlüssel für jedes Token anhand von kid auf.

    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.

    Oder: Eigentlich wolltest du HS256

    Sind Aussteller und Verifizierer beide dein eigener Dienst und ist ein gemeinsames Geheimnis beabsichtigt, setze auf beiden Seiten algorithm: "HS256" statt ES256. Genau das Vermischen der beiden Familien verhindert dieser Fehler – einschließlich des klassischen Angriffsszenarios der Schlüsselverwechslung (Key Confusion).

Verwandte Fehler

Gesamte Signaturfehler-Datenbank durchsuchen