如何调试Bearer error="invalid_token"错误?SPA与Azure AD API认证排障
检查令牌的**受众(Audience)**是否匹配后端API的应用ID URI
解码令牌后查看aud字段,必须和后端Azure AD应用注册里的"API权限"->"应用ID URI"完全一致,包括开头的api://前缀。如果SPA请求的受众不对,后端会直接拒绝。验证令牌的**作用域(Scopes)**是否被后端API授权
查看令牌的scp字段,确认里面包含后端API注册时定义的、且已被SPA应用权限授予的作用域(比如api://xxx/access_as_user)。如果作用域不存在或未授权,后端会返回401。检查令牌的过期时间(Expiration)
查看令牌的exp字段,转换成时间戳确认是否已过期。即使jwt.io显示正常,也要确认当前时间是否在nbf(生效时间)和exp之间。确认后端API的身份验证配置是否正确
检查后端的Azure AD验证配置:- 租户ID是否和令牌的
tid字段一致 - 后端应用的客户端ID(或应用ID URI)是否正确配置为验证受众
- 如果使用MSAL.NET或类似库,确认
TokenValidationParameters中的ValidAudience、ValidIssuer是否设置正确,没有遗漏必要的验证项
- 租户ID是否和令牌的
查看Azure AD的审计日志
登录Azure门户,进入后端应用注册的"监控"->"审计日志",搜索对应的请求事件。日志会显示令牌验证失败的具体原因,比如受众不匹配、作用域无效、令牌已撤销等,这是最直接的排查依据。检查令牌的**颁发者(Issuer)**是否合法
令牌的iss字段格式应为https://login.microsoftonline.com/{租户ID}/v2.0(如果是v2端点),后端必须信任这个颁发者。如果后端配置的是v1端点,但SPA获取的是v2令牌,或者租户ID不匹配,都会导致验证失败。验证Postman请求的令牌携带方式是否正确
确保Postman的请求头中Authorization字段格式为Bearer {令牌内容},没有多余的空格或符号。复制令牌到Postman时,检查是否有换行或额外字符。
内容的提问来源于stack exchange,提问作者Shiraz Bhaiji

