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

迁移至Azure Entra ID后Access Token验证失败,ID Token正常问题咨询

Access Token签名验证失败但ID Token正常的原因及修复方案

核心原因分析

1. Access Token受众(Audience)不匹配

Azure Entra ID中,Access Token的aud字段是后端API的客户端ID/应用ID URI,如果前端请求时指定的受众和后端验证配置的受众不一致,就会触发签名验证失败。而ID Token的aud是前端Angular应用的客户端ID,通常配置正确,所以能通过验证。

  • 检查点:
    • 前端MSAL的scopes是否包含后端API的正确范围(例如api://{后端API应用ID}/.default)
    • 后端Spring Boot配置spring.security.oauth2.resourceserver.jwt.audiences是否与该受众一致

2. Access Token指向公共Graph API

如果前端请求的是User.Read这类Microsoft Graph API的scopes,生成的Access Token是给Graph API用的,后端无法验证其签名(签名密钥属于Graph API,而非你的自定义API)。ID Token始终针对前端应用,不受此影响。

  • 检查点:确认前端请求的scopes属于你的自定义后端API,而非公共Graph API的范围

3. 后端签名密钥源配置错误

Azure Entra ID的Token签名密钥来自租户的JWKS端点,但如果后端配置的JWKS地址不正确,或网络无法访问该端点,会导致无法获取正确密钥验证Access Token。ID Token的验证逻辑通常依赖相同端点,但可能因配置优先级不同而正常工作。

  • 检查点:后端spring.security.oauth2.resourceserver.jwt.jwk-set-uri是否设置为https://login.microsoftonline.com/{你的租户ID}/discovery/v2.0/keys,且网络无拦截

4. 加密算法不兼容

部分场景下,前端获取的Access Token使用了后端未支持的加密算法(如ES256),而ID Token默认使用RS256,刚好匹配后端配置。

  • 检查点:
    • 在Azure Entra ID的后端API应用注册中,确认“令牌配置”的签名算法为RS256
    • 后端配置spring.security.oauth2.resourceserver.jwt.jws-algorithms=RS256明确指定支持的算法

前端MSAL配置调整

确保Angular的MSAL配置中,protectedResourceMap正确映射后端API路径到对应scopes:

protectedResourceMap: new Map([
  ['https://你的后端API域名/api/**', ['api://{后端API应用ID}/.default']]
])

登录或获取Token时,scopes数组必须包含后端API的范围,不能仅请求openid、profile这类ID Token相关范围。

后端Spring Boot配置示例

application.yml中的OAuth2资源服务器配置需符合以下格式:

spring:
  security:
    oauth2:
      resourceserver:
        jwt:
          issuer-uri: https://login.microsoftonline.com/{你的租户ID}/v2.0
          audiences: api://{后端API应用ID}
          jwk-set-uri: https://login.microsoftonline.com/{你的租户ID}/discovery/v2.0/keys

内容的提问来源于stack exchange,提问作者Sree ragh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 22:27:26