在一些三方应用接入 Keycloak OAuth 认证时,可能依赖特定用户属性,比如群组、角色。而在 Keycloak 默认配置下,这些信息是隐藏的。这篇文章记录一下如何将这些信息重新展示出来。
步骤
1、确保在 Client -> Client scopes 中,添加了对应的 scope:

如果某个 scope 选择了 Optional,则需要在一开始认证时就带上对应的 scope 参数:

2、对于部分信息,如果仍然没有出现在 userinfo 中,则需要进入 Client scopes -> 特定的 role 名称 -> Mappers -> 某个名称 中查看,并勾选 Add to userinfo:

3、完成:

案例 (Grafana)
Grafana 可以通过 Keycloak 提供的用户角色来确定该用户的权限,如管理员、编辑者和访问者。
首先进入 Clients -> 你的 grafana client -> Roles -> Create role,分别创建 admin、editor 的 role。
然后编辑 grafana.ini:
role_attribute_path = contains(resource_access.your_grafana_client_id.roles[*], 'admin') && 'Admin' || contains(resource_access.your_grafana_client_id.roles[*], 'editor') && 'Editor' || 'Viewer'