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

Message d’erreur

It is required that you pass in a value for the "algorithms" argument when calling decode().

PyJWT (Python) — jwt.exceptions.DecodeError

Ce que cela signifie

Depuis PyJWT 2.0, jwt.decode() refuse de s’exécuter sans liste algorithms explicite. Ce n’est pas du pinaillage : déduire l’algorithme de l’en-tête du jeton lui-même rend possibles les attaques par confusion d’algorithme (par exemple, vérifier un jeton HS256 en utilisant une clé publique RSA comme secret HMAC). Le vérificateur, configuré côté serveur et hors de portée de l’attaquant, doit indiquer ce qu’il accepte, et PyJWT impose ce contrat au niveau de l’API, de sorte que la forme d’appel dangereuse est tout simplement impossible à écrire.

Pourquoi cela se produit

Comment corriger l’erreur

  1. 1.

    Indiquer l’algorithme explicitement

    Passez exactement le ou les algorithmes qu’utilise votre émetteur (pour les jetons signés avec ECDSA, généralement ES256). Si plusieurs types de jetons transitent par un même service, donnez à chaque émetteur sa propre liste d’autorisation au lieu de les fusionner toutes en une seule liste permissive.

    python
    import jwt
    
    payload = jwt.decode(
        token,
        public_key_pem,
        algorithms=["ES256"],       # required — and a security control, not boilerplate
        audience="api://orders",
    )
  2. 2.

    Pour une inspection sans vérification, le dire explicitement

    Si vous avez seulement besoin de lire les claims (débogage, journalisation), désactivez la vérification délibérément, et n’utilisez jamais le résultat pour des décisions d’autorisation.

    python
    claims = jwt.decode(token, options={"verify_signature": False})
    # or just the header:
    header = jwt.get_unverified_header(token)

Erreurs associées

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