Keycloak中无法从Google身份提供商获取性别与生日信息
Keycloak集成Google身份提供商无法获取性别和生日属性问题
问题描述
我正在使用Keycloak并将Google作为身份提供商,目前可成功获取用户的姓名、邮箱及头像,但无法获取性别和生日属性。
已尝试的操作:
- 在Keycloak > Google身份提供商 > 高级设置中添加以下范围:
https://www.googleapis.com/auth/user.gender.readhttps://www.googleapis.com/auth/user.birthday.read
- 在Keycloak的Google身份提供商设置内创建了gender和birthday映射器
- 在领域设置下的用户配置文件中添加了gender和birthday属性
- 通过OAuth 2.0 Playground测试可成功获取性别和生日
使用Keycloak登录界面通过Google登录时,仅能获取用户名、邮箱、名字、姓氏、头像,gender和birthday属性为null。为何已配置范围和映射器,Keycloak仍无法获取这些属性?是否遗漏了额外配置步骤?
排查与解决步骤
1. 修正映射器的属性提取路径
Google返回的性别、生日数据结构和标准OIDC userinfo不同,需确认映射器配置的JSON路径是否正确:
- 性别:直接使用
gender字段(来自Google People API返回) - 生日:Google返回的生日是数组结构,需指定具体路径,比如取第一个生日的日期:
birthdays[0].date.year、birthdays[0].date.month、birthdays[0].date.day,如果需要拼接成完整生日字符串,可使用脚本映射器自定义处理。
2. 修改用户信息URL为Google People API端点
Keycloak默认的Google用户信息URL是OIDC标准的userinfo端点,该端点不会返回性别和生日数据。需在Keycloak的Google身份提供商设置中,将用户信息URL修改为:
https://people.googleapis.com/v1/people/me?personFields=genders,birthdays
这个URL会调用Google People API,返回包含性别和生日的用户数据。
3. 验证映射器的核心配置
- 映射类型需选择JSON属性,确保从Google返回的JSON响应中提取字段
- 目标属性要与领域用户配置文件中添加的
gender、birthday属性名称完全一致(大小写敏感)
4. 确认Google Cloud中People API已启用
登录Google Cloud控制台,进入API和服务 > 已启用的API和服务,确保People API处于启用状态。即使OAuth Playground能访问,Keycloak使用的客户端ID也需要对应启用该API。
5. 清除会话重新测试
用户之前的登录会话可能缓存了旧的权限范围,需让用户退出Keycloak和Google登录,清除浏览器缓存后重新登录,确保新的权限范围和配置生效。
内容的提问来源于stack exchange,提问作者Tural Karimli
相关产品推荐
相关产品推荐

