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

Fehlermeldung

The specified key is an asymmetric key or x509 certificate and should not be used as an HMAC secret.

Auch ausgegeben als

  • jwt.exceptions.InvalidKeyError: The specified key is an asymmetric key or x509 certificate and should not be used as an HMAC secret.

PyJWT (Python) — jwt.exceptions.InvalidKeyError from HMACAlgorithm.prepare_key

Was der Fehler bedeutet

PyJWT sollte einen öffentlichen Schlüssel, einen privaten Schlüssel oder ein Zertifikat im PEM-Format als Secret für einen HMAC-Algorithmus (HS256/384/512) verwenden und hat das abgelehnt. Diese Sperre gibt es wegen einer bekannten Klasse von JWT-Bugs: Akzeptiert eine prüfende Seite RS/ES- und HS-Algorithmen mit demselben Schlüsselargument, könnte jeder, der den öffentlichen Schlüssel kennt, einen gültigen HMAC über ein gefälschtes Token berechnen. Hier hat der Header des Tokens einen HMAC-Algorithmus genannt, den deine Allowlist erlaubt.

Warum der Fehler auftritt

So behebst du den Fehler

  1. 1.

    Eine Algorithmenfamilie pro Schlüssel zulassen

    Übergib zusammen mit dem öffentlichen Schlüssel deines Ausstellers nur die asymmetrischen Algorithmen, die er verwendet, und halte die HMAC-Prüfung (falls du sie überhaupt brauchst) in einem separaten Codepfad mit eigenem zufälligem Secret.

    python
    # Asymmetric issuer: allow only asymmetric algorithms with the public key.
    claims = jwt.decode(token, public_key, algorithms=["ES256"], audience="https://api.example.com")
    
    # Shared-secret tokens: a random secret, never a PEM, and only HMAC algorithms.
    claims = jwt.decode(token, HMAC_SECRET, algorithms=["HS256"], audience="internal")

Verwandte Fehler

Gesamte Signaturfehler-Datenbank durchsuchen