案例研究:使用 Logto 组织构建多租户
学习如何通过 Logto 组织为多租户设置一个稳固且可扩展的身份基础。
如今,多租户成为应用程序或 SaaS 的一个基本部分。它通常涉及用户、组织、角色和权限之间的复杂关系。例如,一个用户可以是多个组织的成员,反之亦然;一个用户在不同的组织中也可能有不同的角色。
问题
这不仅会在开始时引发头痛,也会在应用程序的长期维护中带来麻烦。传统的基于角色的访问控制 (RBAC) 模型可以部分解决这个问题,但当用户和组织的数量增加时,问题会迅速变得棘手。
例如,刚开始时,你的每个组织中可能只有两个角色:admin
和 member
。当你有 10 个组织时,你将管理 20 个角色;当你有 1,000 个组织时,你将管理 2,000 个角色。
随着业务增长,你可能需要添加更多角色,例如 guest
、developer
等。RBAC 模型的复杂性将呈指数增长。
当我们构建 Logto Cloud 时, 我们遇到了同样的问题。我们很快意识到这是行业的一个常见问题,并且我们需要解决它。Logto 组织为此而来。
组织模板
一个快速的问题:为什么 SaaS 应用是 SaaS?我们相信可扩展性是其中一个最重要的原因。换句话说,对一个客户有效的东西应该对所有客户都有效。
这引出了"组织模板"的概念。组织模板是每个组织访问控制模型的蓝图:它定义了适用于所有组织的角色和权限。
假设我们为每个组织准备了两个角色:
admin
:可以管理组织,包括添加/移除成员、变更角色等。member
:可以访问组织的资源并邀请新成员。
我们可以使用如下配置创建一个组织模板:
将用户添加到组织
由于我们设置了组织模板,管理用户变得简单而自然。你可以通过 Logto 控制台(Web UI)或通过 Logto 管理 API 将用户添加到组织。
参见 配置组织 以了解更多。
我们以以下设置添加了两个组织:
- 组织 A:Alice 和 Bob 都是成员。Alice 拥有
admin
角色,而 Bob 拥有member
角色。 - 组织 B:只有 Alice 是成员,并且拥有
member
角色。
在你的应用中请求组织令牌
在你的客户应用中,现在你可以从 Logto 请求一个组织访问令牌(组织令牌)。组织令牌是一个包含必要信息的 JWT 令牌,用于你的服务验证用户是否在组织中具有权限。
请求组织令牌的详细步骤描述在 将组织集成到你的应用 中。
假设 Alice 登录了你的应用,并且她想要在组织 A 中移除一个用户。你的应用可以请求 "Organization A" 的组织令牌,具有 remove:member
权限(scope)。Logto 会验证 Alice 是否在组织中具有权限,并返回一个组织令牌,因为她拥有 admin
角色:
以下是一些错误案例的例子:
- 如果 Bob 想在组织 A 中移除一个用户,Logto 会返回一个错误,因为他在组织 A 中没有
admin
角色。 - 如果 Alice 想在组织 B 中移除一个用户,Logto 也会返回一个错误,因为她在组织 B 中没有
admin
角色。 - 如果 Bob 想在组织 B 中以任何权限获取组织令牌,Logto 会返回一个错误,因为他在组织 B 中没有成员资格。
你的应用在接收到组织令牌后,可以将其添加到 Authorization
头中来调用你的服务。
在你的服务中验证组织令牌
在你的服务中,可以通过标准 JWT 验证过程来验证组织令牌。参见 验证组织令牌 了解更多细节。
更新组织模板
当你需要更新组织模板时,例如添加一个新角色 developer
,可以在 Logto 控制台中或通过 Logto 管理 API 执行。更改会自动应用于所有组织而无需停机。
总结
借助 Logto 组织,管理和扩展多租户变得标准化且轻松。你可以专注于你的业务逻辑,而将身份和访问控制交给 Logto。