跳到主要内容
ecdsa.com
jsonwebtoken (Node.js)JWT 库

错误信息

jwt audience invalid. expected: <audience>

占位符会被替换为你配置的值,例如“jwt audience invalid. expected: api://orders”。

含义

令牌通过了密码学验证,但其 aud 声明与验证方要求的受众不匹配。受众检查的意义在于:为一个 API 签发的令牌不能被重放到另一个 API——签名证明令牌由谁签发,aud 则证明它是签发给哪个服务的,两项检查都必须通过,才能信任其中的声明。

原因

修复方法

  1. 1.

    比较令牌携带的值与你期望的值

    把两边都打印出来。哪一边错了就修正哪一边:验证方的受众选项,或者客户端请求令牌时使用的 audience/resource 参数。

    js
    const { aud } = jwt.decode(token);
    console.log("token aud:", aud);           // e.g. "api://orders" or ["api://orders"]
    jwt.verify(token, key, {
      algorithms: ["ES256"],
      audience: "api://orders",              // must match exactly (string, array or RegExp)
    });
  2. 2.

    显式接受合法的变体

    如果确实有多个标识符对这个 API 有效,就把它们都列出来——不要为了消除错误而去掉受众检查。

    js
    jwt.verify(token, key, {
      algorithms: ["ES256"],
      audience: ["api://orders", "https://api.example.com"],
    });

相关错误

浏览完整的签名错误库