Zum Inhalt springen
ecdsa.com
jwks-rsa (Node.js)JWKS und Schlüsselermittlung

Fehlermeldung

Unable to find a signing key that matches '2026-10-rotated'

Auch ausgegeben als

  • error in secret or public key callback: Unable to find a signing key that matches '2026-10-rotated'
  • SigningKeyNotFoundError: Unable to find a signing key that matches
  • No KID specified and JWKS endpoint returned more than 1 key

Der Wert in Anführungszeichen ist der `kid` des Tokens (`'undefined'`, wenn der Header keinen hat). Über `jwt.verify()` mit einem Callback bekommt der Text das Präfix „error in secret or public key callback: “. Ein Token ohne `kid` scheitert an einem Satz mit mehreren Schlüsseln mit „No KID specified and JWKS endpoint returned more than 1 key“.

jwks-rsa (Node.js) — SigningKeyNotFoundError, often wrapped by jsonwebtoken or express-jwt

Was der Fehler bedeutet

jwks-rsa hat den Schlüsselsatz heruntergeladen, aber keiner der verwendbaren Signaturschlüssel darin hat den `kid` aus dem Header des Tokens (der Wert in Anführungszeichen). Das Token kann völlig gültig sein – dem Prüfer fehlt nur der Schlüssel, mit dem es signiert wurde. Wird jwks-rsa über den Schlüssel-Callback von jsonwebtoken verwendet, steht vor der Meldung das Präfix „error in secret or public key callback:“.

Warum der Fehler auftritt

So behebst du den Fehler

  1. 1.

    Veröffentlichte kid-Werte auflisten

    Dekodiere den Header des Tokens und vergleiche seinen `kid` mit den Schlüsseln unter deiner `jwksUri`. Steht der `kid` dort, aber der Fehler bleibt, wird der Schlüssel herausgefiltert – sieh dir sein `use` und `kty` an.

    bash
    # kids the provider publishes (jwks-rsa ignores keys with use "enc" and non RSA/EC/OKP keys)
    curl -s https://tenant.example.com/.well-known/jwks.json | jq '.keys[] | {kid, kty, use, alg}'
  2. 2.

    Einen einzigen Client mit Cache und Rate Limiting anlegen

    Ein Client auf Modulebene mit Caching ruft den Satz neu ab, wenn ein neuer `kid` auftaucht, und schützt den Provider vor einer Flut von Anfragen, wenn Angreifer zufällige Werte für `kid` senden.

    js
    import jwksRsa from "jwks-rsa";
    
    // One client per process; unknown kids trigger a refetch, bounded by the rate limit.
    export const jwksClient = jwksRsa({
      jwksUri: "https://tenant.example.com/.well-known/jwks.json",
      cache: true,
      cacheMaxAge: 10 * 60 * 1000,
      rateLimit: true,
      jwksRequestsPerMinute: 10,
    });

Verwandte Fehler

Gesamte Signaturfehler-Datenbank durchsuchen