Fehlermeldung
The JWKS endpoint did not contain any signing keys
Auch ausgegeben als
- The JWKS endpoint did not contain any keys
jwks-rsa (Node.js) — JwksError from getSigningKey()
Was der Fehler bedeutet
Der JWKS-Endpunkt hat mit Schlüsseln geantwortet, aber nach dem Filtern kann keiner davon Signaturen prüfen. jwks-rsa behält nur Schlüssel, deren `use` `"sig"` ist oder fehlt, deren `kty` RSA, EC oder OKP ist und die sich erfolgreich als öffentliche Schlüssel importieren lassen. Alles andere – Verschlüsselungsschlüssel, symmetrische Schlüssel, fehlerhafte oder private JWKs – wird verworfen. Die verwandte Meldung „did not contain any keys“ bedeutet, dass das Array `keys` selbst leer war oder fehlte.
Warum der Fehler auftritt
Es sind nur Verschlüsselungsschlüssel veröffentlicht
häufigManche Provider stellen getrennte Endpunkte für Verschlüsselungsschlüssel (für JWE) und Signaturschlüssel bereit. Ist die URL der Verschlüsselungsschlüssel konfiguriert, kommen Schlüssel mit der Markierung `use: "enc"` zurück, die niemals Signaturen prüfen dürfen.
Symmetrische oder unbekannte Schlüsseltypen
gelegentlichEin Satz aus Schlüsseln mit `kty: "oct"` (HMAC-Secrets – die niemals veröffentlicht werden sollten) oder mit Schlüsseltypen, die jwks-rsa nicht verarbeitet, wird vollständig herausgefiltert.
Private oder fehlerhafte JWKs
gelegentlichSchlüssel, deren Import scheitert (fehlendes `n`/`e`, ungültiges base64url, nicht unterstützte Kurve), werden stillschweigend übersprungen, ebenso Schlüssel, die als private Schlüssel importiert werden, weil sie `d` enthalten. Ein veröffentlichter privater Schlüssel ist außerdem ein Fall von Schlüsselkompromittierung.
Die URL liefert anderes JSON
gelegentlichEin OpenID-Discovery-Dokument oder ein Fehlerobjekt hat kein Array `keys`; jwks-rsa meldet dann, dass der Endpunkt überhaupt keine Schlüssel enthielt.
So behebst du den Fehler
- 1.
kty, use und alg jedes Schlüssels ansehen
Eine Zeile jq zeigt, warum jeder einzelne Schlüssel herausgefiltert wird. Eine Zeile mit `has_private: true` bedeutet, dass der Schlüsselsatz einen privaten Schlüssel preisgibt: Entferne ihn und rotiere diesen Schlüssel.
bash curl -s "$JWKS_URI" | jq '.keys[] | {kid, kty, use, alg, crv, has_private: has("d")}' - 2.
Mindestens einen Signaturschlüssel veröffentlichen
Betreibst du den Endpunkt selbst, nimm jeden aktiven Signaturschlüssel mit `use: "sig"`, einem eindeutigen `kid` und seinem `alg` auf. Verschlüsselungsschlüssel dürfen im selben Satz liegen, solange sie mit `use: "enc"` markiert sind.
json { "keys": [ { "kty": "RSA", "kid": "sig-2026-10", "use": "sig", "alg": "RS256", "n": "…", "e": "AQAB" }, { "kty": "RSA", "kid": "enc-2026", "use": "enc", "alg": "RSA-OAEP-256", "n": "…", "e": "AQAB" } ] }