Message d’erreur
Audience doesn't match
Également affiché sous la forme
- jwt.exceptions.InvalidAudienceError: Audience doesn't match
PyJWT (Python) — jwt.exceptions.InvalidAudienceError
Ce que cela signifie
Le jeton contient un claim `aud` et vous avez passé `audience=` à `jwt.decode()`, mais aucune valeur ne coïncide. PyJWT accepte le jeton lorsqu’au moins une des audiences du jeton est égale à l’une des audiences que vous autorisez ; ici, aucune ne l’était. La signature était valide : le jeton a été émis pour un autre destinataire.
Pourquoi cela se produit
Le jeton a été émis pour une autre API
fréquenteLorsqu’un seul fournisseur d’identité est placé devant plusieurs services, un client peut facilement envoyer au service B un jeton émis pour le service A. Le rejeter est précisément le but de la vérification de l’audience.
Graphie différente du même identifiant
fréquenteLa comparaison de chaînes est exacte : une barre oblique finale, `http` au lieu de `https`, un ID client au lieu d’une URL d’identifiant d’API, ou des lettres majuscules suffisent pour que les audiences soient considérées comme différentes.
Un jeton d’ID est arrivé jusqu’à l’API
occasionnelleLes jetons d’ID OpenID Connect portent l’ID de l’application cliente dans `aud`. Une API devrait recevoir des jetons d’accès émis pour elle ; si le jeton d’ID lui est transféré, la vérification échoue ici.
Comment corriger l’erreur
- 1.
Comparer le claim aud du jeton avec votre audience
Décodez sans vérification uniquement pour inspecter, puis vérifiez avec l’identifiant exact. Modifiez la demande de jeton du client si le jeton a été émis pour la mauvaise audience ; modifiez le vérificateur si l’identifiant était mal orthographié.
python unverified = jwt.decode(token, options={"verify_signature": False}) print(repr(unverified.get("aud"))) # str or list[str] claims = jwt.decode( token, signing_key, algorithms=["ES256"], audience="https://api.example.com/orders", # must equal one of the token's aud values issuer="https://issuer.example.com/", ) - 2.
Autoriser explicitement plusieurs identifiants
`audience` accepte une liste. Utilisez-la lorsqu’une API a légitimement plusieurs identifiants ; ne passez jamais `options={"verify_aud": False}` pour faire disparaître l’erreur.
python # Any one of these may appear in the token's aud. claims = jwt.decode(token, signing_key, algorithms=["ES256"], audience=["orders-api", "https://api.example.com/orders"])