简体中文
  • 身份模型
  • 单租户
  • 多租户
  • 产品

你真的需要多个租户来管理你的身份系统吗?

“租户”这个概念对大多数用户来说相对陌生,但它对构建身份模型却尤为重要。在这篇文章中,我们将通过例子帮助大家了解哪种身份模型更适合他们的业务。

Darcy Ye
Darcy Ye
Developer

随着现今低代码工具和云服务的日益成熟,加上人工智能工具化的加速,开发应用程序的门槛正在大大降低,市场上出现了越来越多的应用程序。

无论是复杂还是简单的应用程序,大多数应用程序都涉及用户注册和登录场景,以便用户可以获得更稳定、安全和定制的服务。为了解决用户登录和注册的问题,第一步就是构建一个身份系统。

对于许多面向消费者的应用程序,它们的身份模型通常相对简单,甚至只需要电子邮件和密码。对那些处于快速增长和吸引新用户阶段的应用程序来说,这已经足够;但一旦应用程序有了自己的商业模式,在最简单的情况下,例如,为广告提供服务,需要区分普通用户帐户和广告商帐户。广告商帐户可以定制广告投放规模、内容等;而普通用户只能浏览一些免费内容和广告等。

Logto 是一个基于云的身份解决方案,同时还有一个与云服务具有相同核心的开源软件(OSS)解决方案,供有特殊需求的用户进行定制。Logto 的服务建立在多租户系统之上,每个 Logto 用户创建自己的帐户,并可以在帐户内管理多个租户。其他各种身份云服务也有类似的架构,每个不同的云服务对“租户”都有自己的定义,因此我们在本文中讨论的租户模型仅限于 Logto 的场景,对于其他供应商可能有其他相应的概念。

值得注意的是,在 Logto 的多租户模型中,租户之间的数据(最终用户的所有信息)是隔离的,因此 Logto 用户可以根据他们的业务需求在一个 Logto 帐户内管理最终用户帐户数据。许多其他身份云服务只能支持每个帐户有一个租户,这使得需要同时管理多个租户的用户频繁切换帐户,导致体验不佳。

General identity model

说了这么多,如何选择一个适合你应用程序的帐户模型呢?我们来看三个案例。

案例 1:应用程序直接为最终用户提供服务

这种应用程序的身份模型非常简单。以一个音乐流媒体应用程序为例——除了管理员(Logto 的用户“foo”,在这种情况下是租户所有者,固有地具有管理员权限)以外,只有最终用户。

在这种情况下,最终用户可以分为三种类型:

  1. 免费计划用户:只能播放免费音乐
  2. 付费计划用户:可以播放免费音乐并创建自己的播放列表
  3. 高级用户:除了播放免费音乐和创建播放列表外,还可以播放高保真音乐

在上述应用场景中,我们只需要三种角色类型(免费、付费、高级),每种角色分配不同的权限。因此,在最终用户登录后,Logto 可以根据他拥有的角色决定是否向他提供某些特定服务(例如访问高保真音乐)。在这一点上,我们只需要一个单一的租户来满足需求。

Music app identity model

案例 2:电商平台应用程序

一个连接第三方服务提供商和最终用户的平台,这也是当今非常常见的 2C 业务模型。需要考虑两个用户群体——以电商应用为例,它们是商家(服务提供者)和买家(最终用户)。

在这里有两种构建身份模型的方式:

  1. 将买家和商家用户群体放在同一个租户下。
eCommerce app single tenant identity model
  1. 将买家和商家分别放入两个不同的租户中。
eCommerce app multi tenant identity model

为便于理解这个例子,我们假设买家可以下订单或查看产品描述;商家可以更改产品价格,更新产品描述,并查看产品库存。商家查看产品描述是为了帮助他们发现问题并及时更新产品信息。

对于身份模型 1,只有一个应用程序。所有注册的用户都成为买家。如果某人需要销售东西,他们可以添加自己的产品进行销售,因此这样的最终用户除了买家权限外,还将获得商家权限来管理自己的产品。

对于身份模型 2,由于每个租户都有自己独特的身份信息和自己的独立授权网关,每个租户需要有自己独立的应用程序。在示例案例中,会有一个买家应用程序和一个商家应用程序。买家帐户不能成为商家,商家帐户也不能成为买家。如果像在模型 1 中那样,商家希望从买家角度检查自己的产品描述,他们则需要在商家应用中重新实现相同功能,或注册一个买家应用帐户来查看。这增加了很多复杂性,但其优点是买家和商家的身份完全隔离。

如果商家有许多不同的产品需要管理,使用身份模型 2 并开发一个更专业的商家应用程序可能是更好的选择。模型 1 更适合像 eBay 这样的平台,其中商家没有很多产品,也不需要过于复杂的产品管理功能。

案例 3:IT 咨询公司制作的应用程序

假设有一家公司提供 IT 技术咨询服务,其客户没有能力自行开发 IT 系统,因此需要向这家公司寻求技术服务。

假设公司有两个客户,一个是书店的内部图书管理系统,另一个客户是酒店的预订系统。

从书店所有者的角度来看,我显然不希望酒店客人能够随意登录我的图书管理系统,因为那样会非常不安全。因此,从保护隐私的角度来看,必须为每个客户设置一个单独的租户,利用租户信息隔离机制,确保客户的数据对其他客户不可见。

Identity model for IT consulting corp

如前所述,即使你需要创建多个租户,Logto 也可以帮助你在一个帐户内管理多个租户,这相比于一些其他需要你自己创建和管理多个帐户的服务更为方便和安全。

通过以上所示的例子,你一定已经搞清楚在哪些情况下你肯定需要创建多个租户,在什么场景下你可以选择单一租户或多个租户,并根据自己的业务需求选择适合自己的身份模型解决方案。

Logto 团队旨在确保“是否应该创建多个租户”这一问题不会成为任何企业的障碍。如果你不确定你的业务场景是否可以通过单一租户实现,请加入 Logto 社区进行咨询。你的问题也可能是别人的问题,所以请与我们分享你遇到的挑战,以帮助提升 Logto 产品的可扩展性。

如果你正在为你的应用程序选择身份框架,Logto 值得一试。它提供了一种即插即用的解决方案,适合从小企业到大规模应用的各种业务场景!