Keycloak - 是不是可以在领域之间共享一组共同的用户?

Posted

技术标签:

【中文标题】Keycloak - 是不是可以在领域之间共享一组共同的用户?【英文标题】:Keycloak - Is it possible share a common set of users between realms?Keycloak - 是否可以在领域之间共享一组共同的用户? 【发布时间】:2018-04-17 17:06:27 【问题描述】:

我正在尝试将 keycloak 实现为我公司的 SSO。我创建了两个领域,领域 A 和领域 B。我想为这两个领域使用相同的用户集,即我需要为这两个领域的用户授予访问权限。是否可以在 Keycloak 中执行此操作?

【问题讨论】:

很好奇。为什么是两个领域? 两个领域,因为应用程序用于两个不同的公司,但有一些用户可以访问这两个系统。这是错误的设计吗? 是的。就像回旋镖说的那样。您将需要这两个领域,因为有两家公司和两个独立的用户商店(即使两者都存在)......除非它们真的像同一家公司并且可以访问每个公司的应用程序并且可以通过角色和权限? (但很可能听起来你想要 2 个领域,因为它们是独立的公司)例如,我有两个领域用于福利公司和工资单公司,因为它们是独立的并且具有单独的凭据,但如果他们同时注册这两种服务,则可以 SSO 实际上是两家不同的公司,但有些用户可以通过角色访问这两个应用程序。但是用户不希望每个应用程序有不同的登录名。 是的。那么2个境界。每个公司的用户都需要自己的帐户……因为如果他们离开了其中一家公司会怎样。 SSO 提供了让他们使用具有每个用户不同帐户的任一凭据的方法。您关心的只是身份验证还是数据同步和共享? 【参考方案1】:

不,那是不可能的。用户始终是特定于领域的。唯一的方法是将用户保留在外部存储中,并通过联合 (UserStorageSpi) 将此外部存储集成到两个领域中。但是您必须在外部存储上进行所有用户管理,因为它是您的用户数据的主要来源。

【讨论】:

或者你可以使用共享LDAP吗? 是的,当然。然后您可以使用 UserStorageSpi 的内置 LDAP 联合实现。【参考方案2】:

同意accepted answer这是不可能的。

您可以将领域视为“用户池”——用户应该属于一个或另一个(身份),除非他们真正被视为两个独立的身份。

然后您可以创建用于客户端连接的第三个领域,因此应用程序只需与单个身份验证服务器集成。然后,这第三个领域可以通过 Keycloak OpenID Connect 与其他两个领域联合。

使用此方法,您还可以根据联合的位置提供组/角色/权限。与此领域集成的客户端随后将可供任一领域中的每个人访问 - 可能需要进一步增强 RBAC 以确定真正的访问权限。

【讨论】:

以上是关于Keycloak - 是不是可以在领域之间共享一组共同的用户?的主要内容,如果未能解决你的问题,请参考以下文章

何时在 Keycloak 中使用领域角色?

仅创建用户 Keycloak 角色?

Keycloak Realm VS Keycloak 客户端

两个微服务之间的通信——keycloak客户端

KeyCloak - 以编程方式创建领域/用户/组?

如何配置 Keycloak 服务器实例以同时支持开发和 UAT 环境?