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

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客户端Keys标签页生成密钥时选择的算法(如RS256),必须和Azure AD应用注册「认证」->「高级设置」->「默认客户端签名算法」完全匹配。
    • 确认Keycloak客户端Advanced标签页的Client Signature Algorithm设置,和生成密钥时的算法一致。
  • 客户端断言受众(Audience)校验
    • Keycloak生成的JWT断言中,aud字段必须严格等于Azure AD的令牌端点(通常为https://login.microsoftonline.com/{租户ID}/v2.0),不能存在拼写错误或多余路径。
    • 可通过抓包工具捕获Keycloak发送给Azure AD的请求,解码client_assertion参数,查看aud值是否正确。
  • 密钥与证书匹配性确认
    • 在Keycloak客户端Credentials标签页,确保选中的signed jwt对应的密钥,是你导出并上传到Azure AD的那一对密钥(Keycloak可能存在多组密钥,需确认选中的是目标密钥)。
    • 查看Keys标签页中密钥的Kid(密钥ID),确保客户端配置关联的是该Kid对应的密钥。
  • 服务器时间同步检查
    • 保证Keycloak服务器与Azure AD的时间差在5分钟以内,若JWT的nbf(生效时间)或exp(过期时间)超出Azure AD的时间窗口,会直接导致签名验证失败。

额外验证方案

用JWT解码工具解码Keycloak生成的客户端断言,重点检查以下字段:

  • iss:必须等于Keycloak客户端的Client ID
  • sub:必须等于Keycloak客户端的Client ID
  • aud:必须严格匹配Azure AD的令牌端点
  • alg:必须和Azure AD配置的签名算法一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 23:48:23