Message d’erreur
Invalid audience
Également affiché sous la forme
- jwt.exceptions.InvalidAudienceError: Invalid audience
À comparer avec « Audience doesn't match », qui signifie que vous avez bien passé `audience`, mais qu’aucune valeur ne coïncidait.
PyJWT (Python) — jwt.exceptions.InvalidAudienceError
Ce que cela signifie
Le jeton contient un claim `aud`, mais `jwt.decode()` a été appelé sans argument `audience`. PyJWT n’ignore pas une audience qu’il ne peut pas vérifier : un jeton qui nomme son destinataire est rejeté, sauf si vous indiquez quel destinataire vous êtes. Le même message apparaît si `aud` a un type invalide (ni une chaîne, ni une liste de chaînes).
Pourquoi cela se produit
Le vérificateur ne passe pas le paramètre audience
fréquenteDu code écrit pour des jetons sans `aud` (ou copié depuis un exemple minimal) casse dès que le fournisseur d’identité commence à inclure `aud`, ce que font la plupart des fournisseurs pour les jetons d’accès et les jetons d’ID. Passer l’audience attendue est la correction prévue.
Un jeton d’ID au lieu d’un jeton d’accès
occasionnelleCertains fournisseurs émettent des jetons d’accès sans `aud`, mais placent toujours l’ID client dans le claim `aud` du jeton d’ID (Amazon Cognito en est un exemple courant). Du code qui fonctionne avec les jetons d’accès se met à échouer dès qu’un client envoie son jeton d’ID.
Le claim aud a un type invalide
rareUn émetteur qui écrit `aud` sous forme de nombre, d’objet ou de liste contenant autre chose que des chaînes produit un jeton que PyJWT ne peut comparer à rien.
Comment corriger l’erreur
- 1.
Indiquer à PyJWT quelle audience vous êtes
Passez l’identifiant de votre API (ou une liste d’identifiants acceptables). Ne désactivez pas `verify_aud` : c’est cette vérification qui empêche d’accepter des jetons destinés à d’autres services.
python claims = jwt.decode( token, signing_key, algorithms=["ES256"], audience="https://api.example.com", # the identifier your API is registered with ) - 2.
Réserver le décodage sans vérification à l’inspection
`verify_signature: False` désactive toutes les vérifications, y compris celle de l’audience. C’est utile pour lire `aud` pendant le débogage, jamais pour autoriser une requête.
python # Reading claims without trusting them (debugging, routing) - never for authorization. header = jwt.get_unverified_header(token) claims = jwt.decode(token, options={"verify_signature": False})