跳到主要内容
ecdsa.com
PyJWT (Python)JWT 库

错误信息

Invalid audience

也可能输出为

  • jwt.exceptions.InvalidAudienceError: Invalid audience

对比“Audience doesn't match”:那条消息表示你传入了 `audience`,但没有任何相同的值。

PyJWT (Python) — jwt.exceptions.InvalidAudienceError

含义

令牌包含 `aud` 声明,但调用 `jwt.decode()` 时没有传入 `audience` 参数。PyJWT 不会忽略它无法检查的受众:令牌指明了接收方时,除非你说明自己是哪个接收方,否则令牌会被拒绝。如果 `aud` 的类型无效(既不是字符串,也不是字符串列表),也会出现同样的消息。

原因

修复方法

  1. 1.

    告诉 PyJWT 你是哪个受众

    传入你的 API 的标识符(或可接受的标识符列表)。不要关闭 `verify_aud`——正是这项检查防止了为其他服务签发的令牌被接受。

    python
    claims = jwt.decode(
        token,
        signing_key,
        algorithms=["ES256"],
        audience="https://api.example.com",  # the identifier your API is registered with
    )
  2. 2.

    不验证的解码只用于查看

    `verify_signature: False` 会关闭所有检查,包括受众检查。它适合在调试时查看 `aud`,但绝不能用来授权请求。

    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})

相关错误

浏览完整的签名错误库