如何通过pac4j库从Keycloak获取用户所属群组?
解决Keycloak群组信息获取问题
一、Keycloak客户端配置自定义映射器
默认情况下Keycloak不会自动将用户群组信息放入ID Token或Access Token,需要先在客户端配置映射器:
- 登录Keycloak控制台,进入目标客户端
- 切换到「Mappers」标签页,点击「Create」按钮
- 填写映射器配置:
- 名称:自定义名称,比如
group-membership-mapper - 类型:选择「Group Membership」
- Token Claim Name:设置为
groups(或自定义名称,比如kc_groups,后续读取需对应) - 勾选「Add to ID token」和「Add to access token」
- 按需勾选「Full group path」:需要完整群组路径则勾选,否则仅返回群组名称
- 保存配置
- 名称:自定义名称,比如
二、pac4j端读取群组信息
配置完成后,用户登录后的ID Token/Access Token会包含群组数据,可通过OidcProfile实例读取:
// 从WebContext和SessionStore获取用户Profile OidcProfile oidcProfile = (OidcProfile) WebContextUtils.getProfile(context, sessionStore); // 根据之前设置的Token Claim Name读取群组列表 List<String> userGroups = oidcProfile.getAttribute("groups", List.class);
如果需要获取群组的额外属性(比如群组描述、自定义属性),可以在Keycloak中创建「Group Attribute」类型的映射器,指定要映射的群组属性和对应的Claim Name,之后同样通过oidcProfile.getAttribute()方法读取对应值。
内容的提问来源于stack exchange,提问作者Arrigo Pierotti
相关产品推荐
相关产品推荐

