如何使用Keycloak

时间:2017-08-08 13:51:01

标签: keycloak user-management

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

一些背景资料:

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

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

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

谢谢, 迈克尔

1 个答案:

答案 0 :(得分:0)

KeyCloak具有可以使用的预览功能:Fine Grain Admin Permissions。顾名思义,它可以精细地控制管理权限。

可能的设置是这样的:

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

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

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