Keycloak中的多租户可以在单个领域内完成吗?

25

首先,我很清楚Keycloak中的多领域方法来实现多租户。我接手了一个传统项目,其中没有考虑到多租户。现在,两年后,客户需要这个功能。实际上,微服务默认情况下就已经为这种情况做好了准备。

客户正在开发一个移动应用程序,通过API在我们的keycloak实例上使用帐户号码(作为用户名)和密码对用户进行身份验证。现在,他想将租户ID添加到登录信息中。

客户想避免使用多个端点,因为这会要求使用多领域解决方案。

最初的想法是只需在注册时连接租户ID和帐户ID即可。但这是一种不好的方法。

所以,我的想法是可能有一种方法可以配置Keycloak,以便我添加一个自定义 tenantid 字段,同时与 username 一起充当数据库世界中的组合主键。

这种配置是否可行?是否有其他方法可以使用单个领域实现多租户行为?


2
每个人根据其用例使用不同的方式实现了基于 Keycloak 的多租户,有些人使用角色,有些人使用组。您还可以使用用户属性存储 tenantid。 - ravthiru
1
如果用户名在所有租户中不是唯一的,您需要在登录期间指定租户ID。您想如何提供它?您使用Keycloak的身份验证流程,还是真的使用自定义构建的API?如果是这样,API调用的结果是什么?只是一个“是”(用户名/密码正确)或“否”(用户名/密码不正确)吗? - Codo
1
客户希望避免使用多个端点,因为多域解决方案需要这样做。 你只需要多个域,URL 只有一个点不同(域的名称)。 制作 Keycloak 请求应该没有问题。 - Julian Egner
3个回答

4

4
这个设置主要适用于委派管理,即有几个用户组,每个组都可以有自己的管理员。它还没有真正运行:预览功能[精细化管理权限]是一个很大的进步,但目前还无法让本地管理员创建新用户,因为无法强制新用户属于本地组。 - Codo
1
是的,没错。应该在答案中加上那个链接。好吧,链接在那里。它可能会帮助@dajood学到一些东西并解决这个问题。不过也不确定。 - Gaurav Mall
3
这仍然是一个有趣的方法,但它需要在所有租户中都是唯一的用户名。因此,问题的这一部分尚未解决。 - Codo
2
同意。需要更多的研究来解决问题的另一部分。 - Gaurav Mall
有没有解决这个问题的方法?我遇到了类似的问题。 - simonC

2
晚来了一步,但也许对其他有兴趣的人有帮助。您可以尝试使用Keycloak扩展keycloak-orgs。我目前正在使用它构建测试堆栈,并感到满意。
在keycloak-orgs中的租户是一个组织。您可以使用内置映射器将组织及其角色映射到令牌声明。
  "organizations": {
    "5aeb9aeb-97a3-4deb-af9f-516615b59a2d" : {
      "name": "foo",
      "roles": [ "admin", "viewer" ]
    }
  }

该扩展带有一个管理界面。从那里,您可以创建组织并将用户分配给它。此外,有一个文档完备的REST APIPhase Two主页上(这是开源该项目的公司)。
维护者提供了一个keycloak docker镜像,其中安装了相关的keycloak扩展。

是的,那个 Keycloak 扩展看起来很有前途,可以支持多租户,虽然我还没有亲自测试过,但很快就会这样做。供参考,这是扩展作者关于它的公告,其中提供了更多信息:https://keycloak.discourse.group/t/keycloak-multi-tenancy-extensions-for-saas-applications/15426 - franky duke
@tom,你是如何将这些角色映射到Keycloak策略的? - Mbuotidem Isaac
@MbuotidemIsaac,很抱歉我不知道如何映射它。开发人员非常负责和乐于助人。 - tom

1
如果您想要一个为多个租户提供服务的单一领域和单一客户端,您可以使用自定义用户属性,例如添加键“tenant=MyTenant”,然后添加客户端范围和映射器以包括具有键=tenant的用户属性。
然后令牌将携带用户的租户信息,您可以使用它来过滤数据、添加新创建的数据等。
在Keycloak中只需要4个步骤:
  1. 使用键约定添加用户属性。
  2. 添加代表租户的客户端范围。
  3. 添加映射器以提取用户属性。
  4. 将客户端范围添加到正在使用的客户端。
在这里写了关于它的文章:https://danielwertheim.se/keycloak-and-multi-tenancy-using-single-realm/

那么,如果一个用户在两个不同的租户应用程序上注册,并希望为每个应用程序设置不同的密码呢? - Adeel Shekhani

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接