Aller au contenu
ecdsa.com
PyJWT (Python)Bibliothèques JWT

Message d’erreur

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

Également affiché sous la forme

  • 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

Ce que cela signifie

On a demandé à PyJWT d’utiliser une clé publique, une clé privée ou un certificat PEM comme secret d’un algorithme HMAC (HS256/384/512), et il a refusé. Ce garde-fou existe à cause d’une catégorie bien connue de bugs JWT : si un vérificateur accepte à la fois des algorithmes RS/ES et HS avec le même argument de clé, quiconque connaît la clé publique pourrait calculer un HMAC valide sur un jeton falsifié. Ici, l’en-tête du jeton indiquait un algorithme HMAC que votre liste d’autorisation permet.

Pourquoi cela se produit

Comment corriger l’erreur

  1. 1.

    Autoriser une seule famille d’algorithmes par clé

    Passez uniquement les algorithmes asymétriques qu’utilise votre émetteur, avec sa clé publique, et gardez la vérification HMAC (si vous en avez vraiment besoin) sur un chemin de code distinct, avec son propre secret aléatoire.

    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")

Erreurs associées

Parcourir toute la base de données des erreurs de signature