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

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

Comment corriger l’erreur

  1. 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. 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"])

Erreurs associées

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