Перейти к содержимому
ecdsa.com
PyJWT (Python)Библиотеки JWT

Сообщение об ошибке

Audience doesn't match

Также выводится как

  • jwt.exceptions.InvalidAudienceError: Audience doesn't match

PyJWT (Python) — jwt.exceptions.InvalidAudienceError

Что это означает

В токене есть утверждение `aud`, и вы передали `audience=` в `jwt.decode()`, но ни одно значение не совпало. PyJWT принимает токен, если хотя бы одна из аудиторий токена равна одной из разрешённых вами аудиторий; здесь совпадений нет. Подпись при этом верна — токен выпущен для другого получателя.

Почему это происходит

Как исправить

  1. 1.

    Сравните aud токена с вашей аудиторией

    Декодируйте токен без проверки только для того, чтобы посмотреть содержимое, а затем проверьте его с точным идентификатором. Если токен выпущен не для той аудитории, измените запрос токена на клиенте; если идентификатор записан с ошибкой, исправьте его в коде проверки.

    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.

    Явно разрешите несколько идентификаторов

    `audience` принимает список. Используйте его, если у одного API действительно несколько идентификаторов; никогда не передавайте `options={"verify_aud": False}`, чтобы избавиться от ошибки.

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

Связанные ошибки

Открыть всю базу ошибок подписей