💡
原文中文,约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 登录。
➡️