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

Spring Boot集成Azure AD报JWT解码失败ID Token含无效声明如何解决

invalid_id_token JWT解码失败(ID Token包含无效声明)解决方案

该报错触发原因是Spring Security OAuth2栈在解析校验ID Token时,发现Token携带的声明值与应用配置的预期校验规则不匹配。Postman可正常解析Token是因为Postman默认仅校验Token签名有效性,不会执行OAuth2协议要求的全量声明校验,二者校验逻辑存在差异。
按以下优先级逐一排查即可解决:

  • 校验受众(aud)声明匹配
    本地Base64解码你拿到的ID Token(不要使用第三方在线解码工具,避免凭证泄露),查看aud字段值:
    • 单租户场景下,aud值必须与Azure AD应用注册面板的客户端ID(Application ID)完全一致,不能误用App ID URI、租户ID等其他值
    • 如果你在配置文件中手动指定了spring.security.oauth2.client.provider.azure.audience参数,直接删除该配置,Azure AD官方Starter会自动从OIDC发现端点拉取合法受众值,手动配置极易出现值不匹配问题
  • 校验签发者(iss)声明匹配
    核对配置文件中的租户ID与Token内iss字段携带的租户ID是否完全一致:
    • 单租户场景常见错误是将租户ID误填为订阅ID、客户端ID,直接替换为Token中解析出的租户ID即可
    • 多租户场景如果出现iss校验失败,直接将Azure AD Starter升级到最新稳定版,4.0之前的版本存在多租户iss正则校验不兼容v2端点的已知问题
    • 不要自定义JwtDecoder Bean,Starter自动配置的解码器已经适配Azure AD的声明规则,自定义解码器大概率会遗漏必要的校验适配逻辑
  • 校验非强制声明一致性
    如果你在Azure AD应用注册面板开启了nonce可选声明,要确认授权请求流程中正确生成、存储了nonce参数并随请求携带,Spring Security默认会校验nonce值的一致性,授权请求未携带nonce但Token返回该字段时会直接抛声明无效错误。临时排查可通过配置指定仅校验强制声明:
    spring:
      security:
        oauth2:
          resourceserver:
            jwt:
              issuer-uri: https://login.microsoftonline.com/${替换为你的租户ID}/v2.0
              jwk-set-uri: https://login.microsoftonline.com/${替换为你的租户ID}/discovery/v2.0/keys
    
  • 校验端点版本一致性
    Azure AD分v1.0、v2.0两套授权端点,如果你配置的issuer地址是v2.0端点,解码后Token内的ver字段值必须为2.0,如果值为1.0说明获取Token使用的端点版本与应用配置不一致,统一两端端点版本即可。

快速定位技巧:开启Spring Security的DEBUG级别日志,启动时会打印ID Token校验失败的具体不匹配声明字段,直接针对该字段调整配置即可,90%以上的该类报错都是aud或iss字段值不匹配导致,无需大范围改动配置。

内容的提问来源于stack exchange,提问作者Akanksha Pandey

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 23:03:53