← 中文资源

简体中文版本

JWT 校验时报 audience 不匹配错误

通过让 aud 声明与预期值及校验它的资源一致,修复 JWT 的 audience 错误。

阅读英文原文

症状

校验以 audience invalid 错误失败,常在服务拆分或 API 重命名之后。aud 声明指出预期接收方,因此为服务 A 签发的 token 被服务 B 正确拒绝。失败通常是签发方与验证方之间的配置漂移,而非签名问题;校验 audience 很重要,否则为一个服务签发的 token 可能被重放到另一个服务。

诊断

解码 aud 声明;检查验证方的预期 audience;核对签发方配置。

node -e "console.log(JSON.parse(Buffer.from(process.argv[1].split('.')[1], 'base64')))" <token>

根因

token 的 audience 与验证方要求的值不匹配,因为该 token 为其他受众签发,或预期 audience 变更而未同步签发方。

修复

让签发方以验证方期望的 audience 签发;把该值放入共享配置;每次校验都验证 audience,使为其他服务签发的 token 被拒绝。只更新一侧正是产生该不匹配的原因。

验证

用为本服务新签发的 token 校验确认被接受,并确认其他 audience 的 token 仍被拒绝。接受对的、拒绝错的即证明 audience 校验生效。

常见陷阱

为避免报错而完全跳过 audience 校验会让跨服务 token 重放成为可能;应正确配置而非关闭校验。