Azure应用:JWKS对应私钥获取及证书上传后验证失败咨询
问题解答
问题1:获取用于签名的私钥
Azure不会主动提供私钥,私钥的获取分两种场景:
- 若通过Azure应用注册页面生成证书:
在Certificates and secrets > Certificates路径下,点击New certificate > Create self-signed certificate生成证书后,点击证书条目里的Download按钮,选择下载PFX格式文件(不要选CER格式,CER仅包含公钥)。PFX文件包含私钥,下载时需设置密码保护,妥善保存后即可用于签名操作。 - 若自行生成密钥对(如用OpenSSL工具):
私钥本身就保存在你的本地环境中,无需从Azure下载,只需将对应公钥(CER或PEM格式)上传至Azure应用即可。
问题2:上传公钥后jwks_uri未更新、验证失败
首先明确:https://login.microsoftonline.com/{tenant-id}/discovery/v2.0/keys这个jwks_uri返回的是Azure AD自身的签名公钥,用于验证Azure AD签发的令牌(如ID Token、Access Token),不会包含你上传到应用的公钥。
针对你的场景(用私钥签名assertion并让Azure AD验证),按以下步骤排查:
- 确保上传到Azure应用的证书公钥的
kid,与你签名assertion时使用的kid完全一致。可从上传的证书详情或本地密钥文件中提取kid值。 - 上传证书后,Azure AD需要1-5分钟同步时间,不要立即测试,等待片刻后再尝试。
- 检查上传证书格式:必须是公钥文件(CER或PEM格式),禁止上传私钥文件。
- 签名
assertion时,确保使用的算法(默认RS256)与Azure应用配置一致,同时assertion中的iss(客户端ID)、aud(Azure AD令牌端点)等字段填写正确。
若仍验证失败,可在Azure AD的App registrations > 你的应用 > Manage > Manifest中查看keyCredentials数组,确认其中已包含你上传的证书条目,且kid值与你使用的一致。
内容的提问来源于stack exchange,提问作者Sergey Tsypanov
相关产品推荐
相关产品推荐

