jwt.io验证Microsoft Identity Platform access token报签名无效原因
签名验证失败的常见原因及修正方法
操作问题集中在以下几类,逐一排查即可解决:
- PEM证书头/尾格式错误
标准PEM格式的证书边界必须是5个半角连字符,正确写法是-----BEGIN CERTIFICATE-----和-----END CERTIFICATE-----。你使用的全角长破折号、连字符数量不足、首尾带多余空格/全角字符,都会导致jwt.io无法正确解析公钥。
另外注意:从微软身份平台jwks接口拿到的x5c字段值是原生Base64编码的证书内容,拼接边界时不要额外做解码、转码操作,直接原样拼接即可;同时保持Base64内容每64个字符换行,不要把整段内容堆成一长行,否则也会触发解析失败。 - 公钥与目标token不匹配
首先确认取公钥的OpenID元数据端点和申请token的环境一致:全球版Azure、中国区世纪互联Azure、美国政府云的公钥端点完全独立,跨环境取公钥必然验签失败。
其次严格匹配token头部的kid字段值:注意区分字段值大小写,不要选成公钥列表里其他kid对应的证书;另外x5c数组的第一个元素才是用于签名的叶子证书,不要选数组里后续的中间CA、根CA证书。 - token本身不支持第三方公开验签
如果你申请的access token受众是微软自家第一方服务(最常见的是Microsoft Graph,即token payload里aud字段值为https://graph.microsoft.com),这类token的签名公钥不会对外公开,只有微软对应服务可以完成验签,哪怕找对kid对应的公开证书也无法通过验证。
要测试公钥验签流程,需要申请受众为你自己在Entra ID中注册的自定义API/应用的access token,这类token的签名公钥才会公开在对应租户的OpenID元数据端点中。 - jwt.io页面配置错误
先查看token头部的alg字段值,微软身份平台签发的可公开验签的JWT默认使用RS256非对称算法,需要在jwt.io公钥输入框右上角的算法下拉菜单里选中对应算法,不要保持默认选中的HS256对称算法。
私钥输入框留空是正确操作,RS256算法验签仅需要公钥,不需要填写私钥内容。
内容的提问来源于stack exchange,提问作者Idash
相关产品推荐
相关产品推荐

