Zum Inhalt springen
ecdsa.com
PyJWT (Python)JWKS und Schlüsselermittlung

Fehlermeldung

Unable to find a signing key that matches: "2026-10"

Auch ausgegeben als

  • jwt.exceptions.PyJWKClientError: Unable to find a signing key that matches: "2026-10"
  • Unable to find a signing key that matches: "None"

Der Wert in Anführungszeichen ist der `kid` des Tokens; `"None"` bedeutet, dass der Header keinen `kid` hat.

PyJWT (Python) — jwt.exceptions.PyJWKClientError from PyJWKClient.get_signing_key_from_jwt

Was der Fehler bedeutet

`PyJWKClient` hat den Schlüsselsatz abgerufen und keinen Signaturschlüssel gefunden, dessen `kid` dem `kid` im Header des Tokens entspricht (in Anführungszeichen angezeigt). PyJWKClient lädt den Schlüsselsatz bei einem unbekannten `kid` einmal neu, der Schlüssel ist unter dieser URL also derzeit tatsächlich nicht veröffentlicht. `"None"` in Anführungszeichen bedeutet, dass das Token überhaupt keinen `kid` hat.

Warum der Fehler auftritt

So behebst du den Fehler

  1. 1.

    kid des Tokens mit den geladenen Schlüsseln vergleichen

    `get_signing_keys(refresh=True)` zeigt genau, welche Schlüssel PyJWKClient verwenden kann. Fehlt der `kid` des Tokens dort, liegt das Problem beim Aussteller oder bei der URL, nicht in deinem Code.

    python
    print(jwt.get_unverified_header(token).get("kid"))
    for key in client.get_signing_keys(refresh=True):
        print(key.key_id, key.algorithm_name)
  2. 2.

    Einen PyJWKClient wiederverwenden

    Erzeugst du den Client pro Anfrage, ist das Caching wirkungslos, und jeder Aufruf geht an den Aussteller. Ein langlebiger Client mit Schlüssel-Cache lädt trotzdem neu, sobald ein neuer `kid` auftaucht.

    python
    from jwt import PyJWKClient
    
    # Module level: one client, cached keys, refetch on an unknown kid.
    JWKS = PyJWKClient("https://issuer.example.com/.well-known/jwks.json", cache_keys=True, lifespan=600)
    
    def verify(token: str) -> dict:
        signing_key = JWKS.get_signing_key_from_jwt(token)
        return jwt.decode(token, signing_key.key, algorithms=["ES256"], audience="https://api.example.com")

Verwandte Fehler

Gesamte Signaturfehler-Datenbank durchsuchen