自定义RoleStorageProvider实现后,如何在Keycloak管理控制台使用?
问题描述
已实现自定义UserStorageProvider,可从外部JDBC存储完成用户的加载、增删改查操作,并为每个用户映射仓库中的角色。目前希望将外部仓库中的所有角色加载到Keycloak Realm,支持角色的增删改及用户角色映射功能。已实现RoleStorageProvider及其Factory并成功加载到Keycloak,但不清楚如何在管理控制台中使用该提供者,寻求指导。
已实现代码
CustomRoleStorageProvider类
public class CustomRoleStorageProvider implements RoleStorageProvider, RoleLookupProvider, RoleProvider { protected EntityManager em; protected ComponentModel model; protected KeycloakSession session; public CustomRoleStorageProvider(KeycloakSession session, ComponentModel model) { this.model = model; this.session = session; this.em = session.getProvider(JpaConnectionProvider.class, "user-store").getEntityManager(); } // { 所有提供者方法的实现代码在此处 ..} }
CustomRoleStorageProviderFactory类
public class CustomRoleStorageProviderFactory implements RoleStorageProviderFactory { public static final String PROVIDER_ID = "JDBC ROLES"; @Override public CustomRoleStorageProvider create(KeycloakSession keycloakSession, ComponentModel componentModel) { log.info(">>>>>>>> Creating Roles factory >>>>>>>>"); return new CustomRoleStorageProvider(keycloakSession, componentModel); } @Override public String getId() { return PROVIDER_ID; } @Override public void close() { } }
管理控制台使用步骤
进入目标Realm
登录Keycloak管理控制台,选择你要配置角色存储的目标Realm。添加角色存储提供者组件
- 左侧导航栏选择「组件」(Components)
- 点击顶部的「添加组件」(Add component)按钮
- 在「组件类型」(Component Type)下拉菜单中选择「角色存储提供者」(Role Storage Provider)
- 在「提供者」(Provider)列表中找到你定义的
JDBC ROLES,点击「下一步」(Next) - 填写组件名称(例如「外部JDBC角色存储」),如果你的提供者需要额外配置参数(如自定义JDBC连接属性等),按需填写后点击「保存」(Save)
验证角色加载
回到当前Realm的「角色」(Roles)页面,切换到「用户联合角色」(User-Federated Roles,部分版本叫「联合角色」Federated Roles)标签页,即可查看从外部JDBC存储加载的角色列表。角色操作与用户映射
- 若你正确实现了
RoleProvider接口的增删改方法,可直接在控制台对这些外部角色进行创建、编辑、删除操作(具体功能取决于你的方法实现逻辑) - 进入用户详情页的「角色映射」(Role Mappings)页面,在「可用角色」(Available Roles)区域可看到外部存储的角色,直接勾选即可为用户分配对应角色。
- 若你正确实现了
内容的提问来源于stack exchange,提问作者Vitos
相关产品推荐
相关产品推荐

