如何通过Keycloak REST API在/userinfo响应中获取用户组信息
解决Keycloak REST API调用/userinfo无法获取groups的问题
1. 调整Token请求的Scope参数
你当前的curl请求仅使用openid scope,而keycloak-js适配器可能默认请求了额外scope(如profile)来获取用户组信息。修改curl命令,添加必要的scope:
curl -d 'client_id=myclient' -d 'username=username' -d 'password=password' -d 'grant_type=password' -d 'scope=openid profile' -d 'client_secret=xxxxxxxxxxxxxxxxxxxxxxxxx' 'http://192.168.43.29:8080/realms/aurcc/protocol/openid-connect/token'
2. 配置Keycloak客户端的协议映射器
Keycloak默认不会自动将用户组返回至/userinfo接口,需手动添加映射器:
- 登录Keycloak管理控制台,切换到目标Realm(
aurcc) - 进入「客户端」页面,找到
myclient并进入详情页 - 切换到「映射器」标签页,点击「创建」按钮
- 配置映射器参数:
- 映射器类型选择「组」
- 名称填写自定义标识(如
user-groups) - Token Claim Name填写
groups - Claim JSON Type选择
JSON(返回数组格式) - 勾选「Add to userinfo」选项
- 保存配置
3. 检查客户端的「Full Scope Allowed」设置
若上述调整无效,检查客户端权限配置:
- 在
myclient的「设置」标签页中,找到「Full Scope Allowed」选项 - 将其设置为「On」,客户端会自动获取所有可用权限范围,无需手动指定scope
4. 验证Token内容
用JWT解析工具解码获取到的accessToken,确认其中是否包含groups声明:
- 若Token中无
groups,回到步骤2检查映射器配置 - 若Token中有
groups但/userinfo未返回,确保请求/userinfo时正确携带Token(请求头Authorization: Bearer <your-access-token>)
内容的提问来源于stack exchange,提问作者Ragul R
相关产品推荐
相关产品推荐

