KeyCloak集成Azure AD作为身份提供商时的用户信息获取问题
问题与解决方案:KeyCloak集成Azure AD后无法获取用户邮箱信息
问题概述
已在KeyCloak中集成客户的Azure AD,但存在以下问题:
- 用户配置文件数据中无法获取邮箱信息,但解码Bearer Token后能看到完整的邮箱字段
- 勾选身份提供商设置中的“Verify JWT Token”时,触发“Verification Signature failed”错误
- 取消勾选“Verify JWT Token”后登录,系统会查找不存在于配置文件数据中的邮箱映射器
- 客户认为请求URL使用
response_type=code而非response_type=code id_token是无法获取邮箱的原因,但在身份提供商设置中找不到修改response_type的选项 - 当前已配置UPN映射器:类型为Attribute Importer,将Azure AD的
upn字段映射到KeyCloak用户的username属性
分步解决方案
1. 修复JWT签名验证失败问题
勾选“Verify JWT Token”是合规的安全做法,需先解决签名验证失败:
- 确认Azure AD身份提供商的JWKS URL配置:在KeyCloak的Azure AD身份提供商设置中,勾选“Use JWKS URL”,并填入正确的Azure AD公钥地址:
https://login.microsoftonline.com/{你的租户ID}/discovery/v2.0/keys(替换{你的租户ID}为Azure AD门户中获取的租户ID) - 清除KeyCloak缓存:进入Realm Settings -> Cache,点击“Clear Cache”按钮,避免旧证书缓存导致验证失败
2. 配置邮箱字段映射器
既然Bearer Token中存在邮箱字段,只需在KeyCloak中添加对应映射器:
- 进入Azure AD身份提供商的Mappers标签页,点击“Create”
- 选择“Attribute Importer”类型,设置名称(如“邮箱映射器”)
- 在“Attribute Name”中填写你解码Token后看到的邮箱字段名(通常为
email或upn) - 在“User Attribute Name”中填写
email,将该字段映射到KeyCloak用户的邮箱属性 - 勾选“Claim JSON Type”为String,保存配置
3. 修改response_type为code id_token
response_type的修改需在客户端配置中操作,而非身份提供商设置:
- 进入KeyCloak对应客户端的设置页面,切换到Advanced标签
- 找到“Allowed Response Types”选项,添加
id_token,确保列表包含code和id_token - 保存配置后,KeyCloak向Azure AD发起授权请求时会自动使用
response_type=code id_token
4. 验证配置效果
- 清除浏览器缓存,重新发起登录流程
- 登录成功后,查看KeyCloak用户配置文件,确认邮箱字段已正确填充
- 再次勾选身份提供商设置中的“Verify JWT Token”,确认无签名验证错误
内容的提问来源于stack exchange,提问作者user503285
相关产品推荐
相关产品推荐

