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

使用证书/公钥验证Azure AD客户端凭据令牌失败排查

Azure AD客户端凭据令牌签名验证失败问题排查

从Azure令牌端点https://login.microsoftonline.com/<tenant_id>/oauth2/v2.0/token获取客户端凭据令牌(作用域为https://graph.microsoft.com/.default),尝试将令牌中的kid与https://login.microsoftonline.com/<tenant_id>/discovery/v2.0/keys中的kid匹配,并用x5c字段的证书验证令牌时,抛出错误:

com.auth0.jwt.exceptions.SignatureVerificationException: The Token's Signature resulted invalid when verified using the Algorithm: SHA256withRSA

以下是针对性的排查与解决步骤:

  • 确认租户ID与端点版本匹配:检查tenant_id是否替换正确,确保令牌端点和密钥发现端点均使用v2.0版本,避免跨版本密钥不兼容。
  • 正确转换x5c证书格式:x5c中的证书是Base64编码的DER格式,必须先解码转换为Java可识别的X.509证书对象,不能直接用原始Base64字符串验证。示例代码:
// 清理证书字符串中的换行符
String certStr = x5cEntry.replaceAll("\\n", "");
byte[] certBytes = Base64.getDecoder().decode(certStr);
CertificateFactory cf = CertificateFactory.getInstance("X.509");
X509Certificate cert = (X509Certificate) cf.generateCertificate(new ByteArrayInputStream(certBytes));
  • 核对令牌算法与证书算法:检查令牌header的alg字段是否为RS256(对应SHA256withRSA),若为其他算法(如ES256),需切换到对应椭圆曲线证书验证,算法不匹配会直接导致签名验证失败。
  • 验证令牌完整性:用JWT解析工具(如jwt.io)解析令牌,确认header和payload未被篡改,同时用工具自带的公钥验证功能排查令牌本身是否存在问题。
  • 规范Auth0库验证逻辑:确保验证时指定正确算法,避免多余规则干扰。示例验证代码:
JWTVerifier verifier = JWT.require(Algorithm.RSA256((RSAPublicKey) cert.getPublicKey(), null))
        .build();
verifier.verify(token);
  • 更新密钥缓存:Azure AD会定期轮换密钥,若本地缓存了旧密钥,会导致匹配的kid对应证书失效。需每次验证前拉取最新密钥,或设置合理的缓存过期时间。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 09:47:36