Azure应用注册中Client Assertion签名验证失败求助
排查步骤
验证证书指纹(x5t)的编码格式
你当前使用的是普通Base64编码的指纹,但Azure要求x5t必须是证书SHA-1指纹的Base64Url编码(替换+为-,/为_,去掉末尾的=)。
操作步骤:- 获取证书的十六进制SHA-1指纹(去掉所有冒号)
- 将十六进制字符串转换为字节数组
- 对字节数组进行Base64Url编码,得到正确的
x5t值
检查Client Assertion的Payload必填字段
确保Payload包含以下必填字段,且值完全符合要求:{ "iss": "你的应用注册Client ID", "sub": "你的应用注册Client ID", "aud": "https://login.microsoftonline.com/你的租户ID/oauth2/v2.0/token", "exp": 1718xxxxxx, // Unix时间戳,过期时间不能超过当前时间+1小时 "nbf": 1718xxxxxx // Unix时间戳,生效时间略早于当前时间即可 }注意
aud必须和你请求令牌时使用的端点完全一致,不能有误。确认Azure应用注册中的证书状态
登录Azure门户,进入应用注册的「证书和密码」页面:- 检查上传的.cer证书是否处于启用状态,未过期
- 核对证书的十六进制指纹(Azure显示的指纹不带冒号)和你用来生成
x5t的指纹完全匹配 - 确保你本地持有的私钥和该公钥证书是配对的,私钥未损坏
检查签名算法和私钥格式
- 确认jwt.io中选择的签名算法是
RS256,和JWT头中的alg一致 - 私钥必须是PKCS#8格式(PEM文件开头为
-----BEGIN PRIVATE KEY-----),如果是PKCS#1格式(开头为-----BEGIN RSA PRIVATE KEY-----),需要转换为PKCS#8后再使用
- 确认jwt.io中选择的签名算法是
核对令牌请求参数
请求访问令牌时,必须包含以下参数:grant_type:client_credentialsclient_assertion_type:urn:ietf:params:oauth:client-assertion-type:jwt-bearerclient_assertion: 你生成的完整JWT字符串scope: 对应的API权限范围(如https://graph.microsoft.com/.default)
确保所有参数无拼写错误,租户ID、Client ID与应用注册信息一致
内容的提问来源于stack exchange,提问作者Ven
相关产品推荐
相关产品推荐

