如何使用 Keycloak 正确进行委派用户自我管理

Posted

技术标签:

【中文标题】如何使用 Keycloak 正确进行委派用户自我管理【英文标题】:How to properly do delegated user self-administration with Keycloak 【发布时间】:2018-01-16 03:15:04 【问题描述】:

我对如何使用 Keycloak 正确执行委派用户自我管理有疑问。

一些背景资料:

我们正在与数百甚至数千个组织合作,我们希望为这些组织管理对我们应用程序的访问。 其中一些组织是我们拥有活动目录的内部部门。来自这些组织的用户可以通过“用户存储联合”进行集成,并将继续在各自的目录中维护。 其中一些组织是拥有适当身份提供者的大型组织的一部分。来自这些组织的用户可以通过“身份代理”进行整合,并将继续在各自的身份提供者中进行维护。 对于其余的外部组织(其中有很多),我们必须自己维护用户帐户,并且我们希望将维护工作委派给外部组织内指定的用户自我管理员。 用户自我管理员应该能够查看、创建、锁定和解锁同一组织内的用户帐户。 (可选)用户自我管理员应该能够授予或撤销他被允许管理的用户对特定(组)应用程序的访问权限。

我知道这可能通过单独的领域和“专用领域管理控制台”来实现,但据我所知,这些领域将是完全独立的。这意味着我们必须为每个组织设置数百次客户端。我们必须弄清楚如何将每个用户引导到适当的领域进行身份验证,并且每个组织都有自己的登录页面。

Keycloak 是否具有类似于“子领域”的概念,如果在领域本身或其中一个子领域中存在相应的用户帐户,用户可以对领域进行身份验证? 或许可以使用“用户存储 SPI”来编写自定义用户存储联合提供程序,但这有意义吗?效果会好吗? 另一种选择可能是使用“Admin REST API”编写自定义用户自我管理应用程序。 (不幸的是,甚至没有一个 API 可以检索除基本属性之外的任何内容过滤的用户,因此该应用程序最终可能会检索数千个用户帐户以找到属于特定组织的五个帐户。) 第三种选择是自定义 Keycloak 本身,但我们不是 Java 专家,所以这样做是否可取? 有人用 Keycloak 实现过这样的场景吗? 有谁知道是否有计划扩展 Keycloak 以更好地支持这样的场景?

谢谢, 迈克尔

【问题讨论】:

嗨@MichaelP - 你能得到关于这个话题的任何答案吗?我们有同样的情况 很遗憾没有,@4integration。 好的 :( 您是否选择了另一个 IAM 解决方案? 最终决定待定。如有必要,我们将需要创建自定义解决方案。 【参考方案1】:

KeyCloak 有一个可能会被使用的预览功能:Fine Grain Admin Permissions。顾名思义,它允许细粒度地控制管理权限。

一个潜在的设置可能是这样的:

为每个需要在 Keycloak 中自我管理的组织创建一个组(例如 org-123)。 将该组织的所有用户添加到组org-123。 为组织的管理员创建另一个组(例如 org-123-admin)并将管理员用户分配给它。 在组 org-123 上启用权限并在该组上创建权限: 资源:组org-123 范围:view-membersmanage-members 策略:包含组 org-123-admin 的组类型的新策略 将客户端realm-management的角色query-users分配给管理员用户

管理员用户现在应该能够登录到专用控制台https://keycloak.domain-name.com/auth/admin/realm-name/console/#/realms/realm-name/users。他们可以搜索用户,并且只会找到组 org-123 中的用户。他们可以修改这些用户。

这是否足够精细取决于您的用例。可能管理员可以修改用户的太多内容。

【讨论】:

以上是关于如何使用 Keycloak 正确进行委派用户自我管理的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Keycloak 中使用手机号码对用户进行身份验证

使用 keycloak 进行 Springboot 测试

如何根据请求的范围自定义 KeyCloak 身份验证流程

如何让 Keycloak 验证用户同意?

如何使用 REST API 在 keycloak 中重置用户密码

KeyCloak 用户凭证加密