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

使用Entra ID作为客户端凭证流身份提供者,Spring Boot验签失败求助

问题:Entra ID JWT在Spring Boot API中验证签名失败

问题描述

  • 在Entra ID注册了一个空占位符应用(未关联任何Azure资源),受众仅配置为Microsoft.Graph
  • 通过Postman成功获取到有效JWT Token(可在jwt.io正常解析)
  • 本地Spring Boot API已用其他身份提供者的Token验证通过,但使用该Entra Token时触发Invalid Signature错误
  • 日志显示Spring Boot已成功获取Entra的证书列表,issuer-uri是从jwt.io解析的Token中提取的,确认配置正确
  • 额外测试:手动编写代码,用jwt.io上提取的模数、指数和RSA加密方式构建密钥验证Token,结果仍提示无效

相关配置截图

认证配置类

认证配置类

application.properties配置

application.properties配置

手动验证Token的代码

手动验证Token代码

疑问

受众设置为Microsoft.Graph是否是问题?还有哪些排查方向?


排查建议

  1. 修正Token受众匹配问题
    当前获取的Token受众是Microsoft.Graph,但你的Spring Boot API是自定义服务,这个Token本身就不是为你的API颁发的。Entra ID会根据请求参数颁发对应受众的Token,你需要获取受众为你的Spring Boot API(即Entra注册应用的Application ID URI或Client ID)的Token,而非Graph的。

  2. 检查签名算法与配置一致性
    确认jwt.io解析出的Token签名算法(如RS256)和Spring配置中的jwt.algorithm完全匹配,避免算法不兼容导致签名验证失败。

  3. 验证Issuer URI格式正确性
    Entra ID的Issuer URI标准格式为https://login.microsoftonline.com/{tenant-id}/v2.0,确保你配置的issuer-uri没有拼写错误,尤其注意租户ID和版本号(v1.0与v2.0的Token格式、签名证书存在差异)。

  4. 简化Spring验证配置
    避免手动指定密钥,依赖Spring Security自动从Issuer URI的JWKS端点({issuer-uri}/.well-known/openid-configuration/jwks)拉取最新签名证书,手动配置密钥容易出现与实际证书不匹配的问题。

  5. 重新获取正确受众的Token
    在Postman请求Token时,将scope参数设置为你的API权限(例如api://{your-app-client-id}/.default),而非Graph的权限,这样获取的Token受众才会匹配你的API,签名验证才能通过。

  6. 检查证书有效性
    通过jwt.io查看Token的签名证书链,确认证书在有效期内;同时访问Entra的JWKS端点,检查返回的证书与Token中携带的证书是否一致。


内容的提问来源于stack exchange,提问作者S-Wing

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 22:12:46