Keycloak 23 实现基于组的访问限制(从v11升级适配)
Keycloak 23 实现组管理员专属权限(替代旧版组权限)
核心目标
让test组的管理员permissions_test仅能查看、管理test组内的用户及test组本身,替代Keycloak 11中已废弃的组权限功能。
后续配置步骤
1. 完善Authorization模块的资源与授权范围
- 补充资源定义:
- 创建
group-test资源:资源类型选择Group,资源URI填写test组的具体ID路径(如/groups/[test-group-id]),添加属性group: test用于关联组 - 创建
group-test-users资源:资源类型选择User,资源URI设为/users/*,添加属性group: test,关联test组下的所有用户
- 创建
- 扩展授权范围:
在已有的view-members基础上,新增manage-members(用户管理权限)、view-group(组查看权限)、manage-group(组管理权限)三个授权范围,覆盖所有需要控制的操作。
2. 调整策略与权限绑定
- 优化组策略:
原基于组的策略仅判断用户属于test组,需调整为复合策略:组合“用户属于test组”和“用户拥有组管理员角色”两个条件(确保只有组内管理员能触发权限) - 绑定权限到资源:
- 针对
group-test资源:- 创建
view-test-group权限:关联view-group授权范围,绑定上述复合策略 - 创建
manage-test-group权限:关联manage-group授权范围,绑定上述复合策略
- 创建
- 针对
group-test-users资源:- 创建
view-test-users权限:关联view-members授权范围,绑定上述复合策略 - 创建
manage-test-users权限:关联manage-members授权范围,绑定上述复合策略
- 创建
- 针对
3. 角色分配与映射(关键)
- 不再直接给用户分配全局的
realm-management角色,改为:- 在
react-client客户端下创建group-admin-test客户端角色 - 将
realm-management下的query-groups、query-users、manage-users、manage-groups角色,添加为group-admin-test的复合角色(实现角色权限的继承) - 将
group-admin-test客户端角色分配给permissions_test用户,或直接分配给test组的组角色(实现组内管理员批量继承)
- 在
4. 调整Authorization决策规则
在react-client的Authorization设置中,将决策策略设为Unanimous(一致同意),确保只有所有策略条件都满足时,才允许用户执行对应操作。
5. 前端/后端权限校验适配
- React前端:调用Keycloak管理API前,先请求
/realms/main-realm/authz/entitlement/react-client获取权限令牌,携带该令牌访问组/用户接口,触发Keycloak的权限校验 - Node.js后端:集成Keycloak授权中间件,对每个管理接口请求做权限校验,验证当前用户是否拥有对应资源的操作权限
6. 测试验证
- 使用
permissions_test账号登录,尝试访问非test组的用户/组,应返回权限拒绝 - 尝试查看、编辑test组内的用户及test组本身,应能正常操作
- 查看Keycloak日志中的权限决策记录,排查配置逻辑错误
内容的提问来源于stack exchange,提问作者OldLavyGenes474
相关产品推荐
相关产品推荐

