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

Spring Boot配置AzureAD公钥认证遇AADSTS900144错误求助

解决AADSTS900144: 请求体必须包含参数'client_id'错误

针对你用证书替代client-secret做Azure AD认证时遇到的这个错误,从几个常见排查点入手:

1. 检查公钥/私钥是否搞混

你提到生成了public-key.pem,但客户端用private_key_jwt认证方式时,需要用私钥签名请求,而上传到Azure的才是公钥(.cer文件)。如果你的pem是公钥,配置肯定不对:

  • 重新从生成的自签名证书中导出私钥(用PowerShell或OpenSSL生成包含私钥的.pem文件)
  • 把私钥文件放在resources目录,配置时指向这个私钥文件

2. 核对application.yml的配置格式

确保client-id和证书相关配置都在正确的节点下,正确配置示例:

spring:
  security:
    oauth2:
      client:
        registration:
          azure-ad:
            client-id: <你的client-id>
            client-authentication-method: private_key_jwt
            authorization-grant-type: authorization_code
            scope: openid,profile,email
        provider:
          azure-ad:
            issuer-uri: https://login.microsoftonline.com/<你的tenant-id>/v2.0
      resourceserver:
        jwt:
          issuer-uri: ${spring.security.oauth2.client.provider.azure-ad.issuer-uri}
    # 私钥配置
    oauth2.client.registration.azure-ad.client-private-key-location: classpath:your-private-key.pem

注意:

  • 必须显式设置client-authentication-method: private_key_jwt,否则默认会用client_secret方式,导致配置不匹配
  • client-id要确保写在registration.azure-ad节点下,不要写错位置或拼写错误

3. 验证Azure门户的证书配置

  • 登录Azure门户,进入你的应用注册,在“证书和密码”选项卡中,确认上传的.cer证书状态是“有效”,并且没有过期
  • 证书的指纹要和你本地生成的一致,避免上传错文件

4. 检查请求签名是否正确

如果以上都没问题,可能是私钥签名的问题:

  • 确保私钥文件没有损坏,格式是标准PEM格式(开头是-----BEGIN PRIVATE KEY-----)
  • 可以用OpenSSL验证私钥是否能正常读取:openssl rsa -in your-private-key.pem -check

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 04:57:24