Fehlermeldung
no applicable key found in the JSON Web Key Set
jose (JavaScript) — JWKSNoMatchingKey, code ERR_JWKS_NO_MATCHING_KEY
Was der Fehler bedeutet
jose hat das JSON Web Key Set durchsucht, das du ihm übergeben hast, und keinen Schlüssel gefunden, der dieses Token prüfen darf. Ein Schlüssel kommt nur infrage, wenn alle diese Bedingungen gelten: Sein `kid` ist gleich dem `kid` im Header des Tokens (falls das Token einen hat), sein `kty` passt zum `alg` des Tokens, sein `alg` (falls vorhanden) ist gleich dem `alg` des Tokens, sein `crv` passt (P-256 für ES256), `use` fehlt oder ist `"sig"`, und `key_ops` (falls vorhanden) enthält `"verify"`. Es lief keine Kryptografie – der Fehler liegt in der Auswahl des Schlüssels.
Warum der Fehler auftritt
Der Aussteller hat seinen Signaturschlüssel rotiert
häufigNeue Tokens tragen einen neuen `kid`, den der zwischengespeicherte oder fest im Code hinterlegte Schlüsselsatz noch nicht enthält. Das ist die häufigste Ursache und beginnt meist genau in der Minute einer Rotation; später neu gestartete Dienste funktionieren, ältere scheitern.
Der Schlüsselsatz gehört zu einem anderen Aussteller oder einer anderen Umgebung
häufigEine JWKS-URL aus dem Staging in der Produktion, das JWKS eines anderen Mandanten oder ein aus der Dokumentation kopierter Schlüsselsatz. Jeder `kid` sieht plausibel aus, keiner passt.
Die Metadaten des Schlüssels widersprechen dem Token
gelegentlichDer JWK hat `alg: "RS256"`, während das Token mit ES256 signiert ist, oder der EC-Schlüssel liegt auf P-384, während das Token ES256 verwendet (das P-256 verlangt). jose überspringt solche Schlüssel auch dann, wenn der `kid` passt, denn genau das Verwenden eines Schlüssels für einen anderen Algorithmus sollen die JWK-Metadaten verhindern.
Der Schlüssel ist für Verschlüsselung markiert
gelegentlichEin Schlüssel, der mit `use: "enc"` oder mit `key_ops` ohne `"verify"` veröffentlicht wurde, ist kein Prüfschlüssel für Signaturen. Manche Provider veröffentlichen beide Arten in einem Satz; nur die Schlüssel mit `sig` können Tokens prüfen.
Eine lokale Kopie des JWKS wurde nie aktualisiert
gelegentlich`createLocalJWKSet` verwendet die Schlüssel, die du übergibst, für immer. Wurde der Satz beim Bereitstellen aus einer Datei oder einer Umgebungsvariable geladen, veraltet er mit der nächsten Rotation unbemerkt.
So behebst du den Fehler
- 1.
kid des Tokens mit den veröffentlichten Schlüsseln vergleichen
Dekodiere den geschützten Header und liste die veröffentlichten Schlüssel mit ihren Werten für `kid`, `alg`, `kty`, `crv` und `use` auf. Fehlt der `kid` im Satz, hast du es mit einer Rotation oder dem falschen Schlüsselsatz zu tun; ist er vorhanden, sieh dir die Metadatenfelder an.
bash # kid and alg the token asks for python3 -c 'import base64,json,sys; h=sys.argv[1].split(".")[0]; print(json.loads(base64.urlsafe_b64decode(h + "=" * (-len(h) % 4))))' "$TOKEN" # kid, alg, kty, crv, use of every key the issuer publishes curl -s https://issuer.example.com/.well-known/jwks.json | jq '.keys[] | {kid, alg, kty, crv, use}' - 2.
JWKS beim Aussteller abrufen, statt Schlüssel per Pinning festzuschreiben
`createRemoteJWKSet` speichert die Schlüssel zwischen und ruft den Satz neu ab, wenn ein Token einen `kid` nennt, den es noch nicht kennt; so werden Rotationen automatisch übernommen, ohne beliebige Schlüssel zu akzeptieren.
js import { createRemoteJWKSet, jwtVerify } from "jose"; // Fetches the JWKS, caches it, and refetches when a token names an unknown kid // (at most once per cooldownDuration, 30 s by default). const jwks = createRemoteJWKSet(new URL("https://issuer.example.com/.well-known/jwks.json")); const { payload } = await jwtVerify(token, jwks, { algorithms: ["ES256"], issuer: "https://issuer.example.com", }); - 3.
Schlüssel mit konsistenten Metadaten veröffentlichen
Betreibst du den Aussteller, stelle sicher, dass jeder Signaturschlüssel einen eindeutigen `kid`, `use: "sig"` sowie `alg` und `crv` hat, die zu den Tokens passen, die er signiert. Veröffentliche den neuen Schlüssel, bevor du anfängst, mit ihm zu signieren.
json { "keys": [ { "kty": "EC", "crv": "P-256", "kid": "2026-10", "use": "sig", "alg": "ES256", "x": "…", "y": "…" } ] }
Verwandte Fehler
multiple matching keys found in the JSON Web Key Setjose (JavaScript)Unable to find a signing key that matches '2026-10-rotated'jwks-rsa (Node.js)IDX10503: Signature validation failed. The token's kid is: '2026-10', but did n…Microsoft.IdentityModel.JsonWebTokens / System.IdentityModel.Tokens.Jwt (.NET)signature verification failedjose (JavaScript)