Keycloak配置Private key JWT对接Azure AD时签名验证失败求助
排查Keycloak配置Private Key JWT对接Azure AD时的签名验证失败问题
核心错误定位
Azure AD返回的错误码700027直接指向客户端断言的签名验证未通过,说明Keycloak生成的JWT签名,Azure AD无法用你上传的证书完成校验。
具体排查步骤
- 证书格式与上传完整性检查
- 从Keycloak导出证书时,必须导出完整的PEM格式文件(包含
-----BEGIN CERTIFICATE-----和-----END CERTIFICATE-----首尾标识),不能仅复制中间的证书内容。 - 核对Azure AD应用注册的「证书和密码」中上传的证书,确保和Keycloak导出的内容完全一致,无多余空格、换行或截断。
- 从Keycloak导出证书时,必须导出完整的PEM格式文件(包含
- 签名算法一致性验证
- 检查Keycloak客户端
Keys标签页生成密钥时选择的算法(如RS256),必须和Azure AD应用注册「认证」->「高级设置」->「默认客户端签名算法」完全匹配。 - 确认Keycloak客户端
Advanced标签页的Client Signature Algorithm设置,和生成密钥时的算法一致。
- 检查Keycloak客户端
- 客户端断言受众(Audience)校验
- Keycloak生成的JWT断言中,
aud字段必须严格等于Azure AD的令牌端点(通常为https://login.microsoftonline.com/{租户ID}/v2.0),不能存在拼写错误或多余路径。 - 可通过抓包工具捕获Keycloak发送给Azure AD的请求,解码
client_assertion参数,查看aud值是否正确。
- Keycloak生成的JWT断言中,
- 密钥与证书匹配性确认
- 在Keycloak客户端
Credentials标签页,确保选中的signed jwt对应的密钥,是你导出并上传到Azure AD的那一对密钥(Keycloak可能存在多组密钥,需确认选中的是目标密钥)。 - 查看
Keys标签页中密钥的Kid(密钥ID),确保客户端配置关联的是该Kid对应的密钥。
- 在Keycloak客户端
- 服务器时间同步检查
- 保证Keycloak服务器与Azure AD的时间差在5分钟以内,若JWT的
nbf(生效时间)或exp(过期时间)超出Azure AD的时间窗口,会直接导致签名验证失败。
- 保证Keycloak服务器与Azure AD的时间差在5分钟以内,若JWT的
额外验证方案
用JWT解码工具解码Keycloak生成的客户端断言,重点检查以下字段:
iss:必须等于Keycloak客户端的Client IDsub:必须等于Keycloak客户端的Client IDaud:必须严格匹配Azure AD的令牌端点alg:必须和Azure AD配置的签名算法一致
内容的提问来源于stack exchange,提问作者Hari
相关产品推荐
相关产品推荐

