Zum Inhalt springen
ecdsa.com
PyJWT (Python)JWT-Bibliotheken

Fehlermeldung

The specified alg value is not allowed

Auch ausgegeben als

  • jwt.exceptions.InvalidAlgorithmError: The specified alg value is not allowed

PyJWT (Python) — jwt.exceptions.InvalidAlgorithmError

Was der Fehler bedeutet

Der Parameter `alg` im Header des Tokens steht nicht in der Liste `algorithms`, die du an `jwt.decode()` übergeben hast. PyJWT prüft das vor der Signatur, weil der Header von demjenigen stammt, der das Token erzeugt hat, und deshalb nicht festlegen darf, wie es geprüft wird. Das Token kann korrekt signiert sein – nur eben mit einem Algorithmus, den du nicht erlaubt hast.

Warum der Fehler auftritt

So behebst du den Fehler

  1. 1.

    Zuerst den Header lesen

    `jwt.get_unverified_header()` zeigt `alg` und `kid`, ohne irgendetwas zu vertrauen. Vergleiche das mit deiner Allowlist und mit den Schlüsseln, die dein Aussteller veröffentlicht.

    python
    print(jwt.get_unverified_header(token))  # {'alg': 'ES256', 'kid': '...', 'typ': 'JWT'}
  2. 2.

    Genau den Algorithmus des Ausstellers erlauben

    Trage den Algorithmus, den dein Aussteller verwendet, in `algorithms` ein und beziehe die Schlüssel aus seinem JWKS. Liste während einer Migration beide Algorithmen auf, jeden über `kid` seinem eigenen Schlüssel zugeordnet.

    python
    from jwt import PyJWKClient
    
    jwks = PyJWKClient("https://issuer.example.com/.well-known/jwks.json")
    signing_key = jwks.get_signing_key_from_jwt(token)
    claims = jwt.decode(
        token,
        signing_key.key,
        algorithms=["ES256"],  # the algorithm(s) your issuer actually uses, never the token's own header
        audience="https://api.example.com",
    )

Verwandte Fehler

Gesamte Signaturfehler-Datenbank durchsuchen