You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

OAuth2AuthorizedClient Access Token的aud无效,API调用报错排查

问题分析与解决

为什么OAuth2AuthorizedClient的token aud无效?

你拿到的token的aud(受众字段)是00000003-0000-0000-c000-000000000000,这是Microsoft Graph API的官方客户端ID,说明这个token是专门用于调用Graph API的,并非针对你的Spring Boot REST API生成。

你的API后端预期的受众是https://acme.onmicrosoft.com/9a452e9f-a9ba-412e-9efc-213c3bcaac0c(你的API应用注册的ID URI),当API收到Graph的token时,会发现token的受众与自身预期不匹配,直接判定token无效——报错里的“签名无效”属于误导性提示,核心原因是受众不匹配。

解决步骤

1. 让BFF请求针对你的API的access token

在BFF的Spring Boot配置中,指定请求目标API的权限范围,而非默认的Graph API scope:

  • 在application.yml或application.properties里,将OAuth2客户端的scope设置为你的API权限范围,格式为{API应用ID URI}/.default,也就是https://acme.onmicrosoft.com/9a452e9f-a9ba-412e-9efc-213c3bcaac0c/.default。
  • 确保BFF在认证流程中,向Azure AD请求该scope的token,这样OAuth2AuthorizedClient中的access token的aud就会匹配你的API受众。

2. 确认API后端的配置

你的Spring Boot API需要正确配置Azure AD验证参数,确保它验证的token受众是自身的应用ID URI或客户端ID:

  • 在API的配置文件中,设置spring.security.oauth2.resourceserver.jwt.audiences为https://acme.onmicrosoft.com/9a452e9f-a9ba-412e-9efc-213c3bcaac0c(或你的API客户端ID,取决于应用注册时的设置)。
  • 确保JWT验证的issuer为Azure AD租户地址,比如https://login.microsoftonline.com/{你的租户ID}/v2.0。

3. 调整BFF的token获取逻辑

如果之前BFF默认获取的是Graph的token,需要修改逻辑明确请求针对你的API的token:

  • 可以通过OAuth2AuthorizedClientService或@RegisteredOAuth2AuthorizedClient注解,指定对应的客户端或scope来获取正确的token。

额外注意点

  • 确保Azure AD门户中,你的API应用注册已为BFF应用注册授予对应的API权限。
  • 不要混用不同受众的token:Graph的token仅能调用Graph API,你的API的token仅能访问你的API,受众必须严格匹配。

内容的提问来源于stack exchange,提问作者robert trudel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 04:43:18