Better Auth 的多租户用户鉴权的构想

Better Auth 的多租户用户鉴权的构想

💡 原文中文,约4600字,阅读约需11分钟。
📝

内容提要

我在 Afilmory 实现了多租户 SaaS 的身份验证功能,使用统一的 Better Auth 实例,确保每个租户的用户记录独立,数据隔离。通过适配器整合租户信息到数据库查询,并利用 OAuth 网关处理回调,简化配置。设计分为数据模型、ORM 层和 OAuth 流程三部分。

🎯

关键要点

  • 在 Afilmory 实现了多租户 SaaS 的身份验证功能,使用统一的 Better Auth 实例。
  • 每个租户的用户记录独立,确保数据隔离。
  • 最初考虑为每个租户配置独立的 OAuth 实例,但发现维护成本高。
  • 最终决定使用单一的 Auth Provider,允许同一用户在不同租户下拥有不同身份。
  • 数据库设计中增加 tenantId 标识,确保用户记录与租户关联。
  • Better Auth 在 OAuth 回调时默认不考虑 tenantId,可能导致跨租户越权问题。
  • 通过适配器将 tenantId 强行带入查询,确保数据隔离。
  • 在多租户环境中,使用统一的 OAuth 网关处理回调,简化配置。
  • 利用 OAuth 协议中的 state 参数传递租户信息,确保回调正确落到对应租户。
  • 设计分为数据模型层、ORM/适配器层和 OAuth 流程层,确保多租户问题得到有效解决。

延伸问答

如何在多租户 SaaS 中实现用户身份验证?

通过使用统一的 Better Auth 实例,确保每个租户的用户记录独立,并通过适配器整合租户信息到数据库查询。

为什么不为每个租户配置独立的 OAuth 实例?

维护多个 OAuth 实例会导致配置复杂、内存占用增加和逻辑重复,因此选择使用单一的 Auth Provider。

如何确保多租户环境中的数据隔离?

通过在数据库设计中增加 tenantId 标识,并在查询时强行带入 tenantId,确保用户记录与租户关联。

Better Auth 在 OAuth 回调时如何处理租户信息?

Better Auth 默认不考虑 tenantId,因此需要通过适配器将 tenantId 强行带入查询,以避免跨租户越权问题。

如何在多租户环境中简化 OAuth 配置?

通过使用统一的 OAuth 网关处理回调,允许多个租户复用同一套 OAuth 应用,而不需要每个租户单独配置。

在多租户 SaaS 中,如何处理用户的不同身份?

同一用户可以在不同租户下拥有不同身份,确保权限和数据完全隔离,使用相同的 GitHub 或 Email 登录。

➡️

继续阅读