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
相关产品推荐
相关产品推荐

