多租户 SaaS 应用程序的最佳方法
best approach for multi tenant SaaS application
我正在尝试构建一个多租户 SaaS 应用程序,我知道有多种方法,但我选择了我认为最适合的多数据库方法。
所以我为每个租户创建一个数据库,并在主数据库中存储 table 个租户
并根据子域将用户连接到各自的数据库。
现在我的问题是在主数据库中存储用户的位置?或租户数据库,将用户存储在主数据库中将难以在其他数据库中获取用户相关模型,但将其存储在租户数据库中将难以对所有用户进行身份验证...
还有最好的场景是什么?
- 认证,获取jwt令牌。
- 随每个请求发送令牌。
- 在每个请求上验证令牌,检查子域,连接到相应的租户数据库,执行请求。
这是一个好方法吗?我应该如何处理用户 table 问题?
ThnQ
我可以提供第三种选择。在租户和主数据库中都有用户。然后,您可以创建过程以在用户更改租户数据库时更新主数据库(反之亦然)。
此外,我不知道 Laravel 中的模型,但是 MySQL 没有跨数据库 JOIN 的问题。
将用户保留在租户数据库中是一个不错的选择。当您根据子域区分您的租户时,您可以告诉您的身份验证系统查询子域特定的数据库。
共享认证流程
- 用户点击子域登录申请
- 用户凭据将发送到应用程序
- 在将凭据传递给身份验证之前,根据用户来自的子域确定用于用户身份验证的数据库。
- 将数据库名称、用户凭据传递给身份验证系统
- 认证系统查询特定数据库并对用户进行认证
- 生成会话
我正在尝试构建一个多租户 SaaS 应用程序,我知道有多种方法,但我选择了我认为最适合的多数据库方法。
所以我为每个租户创建一个数据库,并在主数据库中存储 table 个租户 并根据子域将用户连接到各自的数据库。
现在我的问题是在主数据库中存储用户的位置?或租户数据库,将用户存储在主数据库中将难以在其他数据库中获取用户相关模型,但将其存储在租户数据库中将难以对所有用户进行身份验证...
还有最好的场景是什么?
- 认证,获取jwt令牌。
- 随每个请求发送令牌。
- 在每个请求上验证令牌,检查子域,连接到相应的租户数据库,执行请求。
这是一个好方法吗?我应该如何处理用户 table 问题? ThnQ
我可以提供第三种选择。在租户和主数据库中都有用户。然后,您可以创建过程以在用户更改租户数据库时更新主数据库(反之亦然)。
此外,我不知道 Laravel 中的模型,但是 MySQL 没有跨数据库 JOIN 的问题。
将用户保留在租户数据库中是一个不错的选择。当您根据子域区分您的租户时,您可以告诉您的身份验证系统查询子域特定的数据库。
共享认证流程
- 用户点击子域登录申请
- 用户凭据将发送到应用程序
- 在将凭据传递给身份验证之前,根据用户来自的子域确定用于用户身份验证的数据库。
- 将数据库名称、用户凭据传递给身份验证系统
- 认证系统查询特定数据库并对用户进行认证
- 生成会话