【问题标题】:Creating a Multi Tenancy / Saas and having trouble desiging the database for users创建多租户 / Saas 并在为用户设计数据库时遇到问题
【发布时间】:2019-10-02 17:58:33
【问题描述】:

我正在构建一个带有单个数据库的 SAAS。 Tenant 在这种情况下称为site

我想实现 Stackexchange 的功能,它具有全局登录以及 stackoverflow/softwareengineering/etc 登录。我不确定如何存储用户。一个用户可以有很多站点,站点也可以有很多用户。设计 JoinTable 的问题是用户角色存储在用户表中(我使用 Symfony3.4)。我想要每个站点/租户的单独角色。

我想弄清楚的另一个问题是如何登录。我正在使用 oAuth2 并登录,我只需致电 {{url}}/oauth/v2/token?grant_type=password&client_id=client_id&client_secret=client_secret&username=admin&password=pass。我应该如何让用户登录到特定的租户/站点?我是否将 site_id 添加到查询参数中?

感谢阅读。

【问题讨论】:

  • 投票结束这个问题,因为这个问题对于一个单一、简洁的答案来说太宽泛了。

标签: php database symfony multi-tenant saas


【解决方案1】:

这个问题很笼统,所以我会尝试一下。

如果您要构建站点网络,理想情况下每个站点都有自己的数据库。这将确保沙盒化,并且能够在因扩展或安全问题而需要时轻松将站点迁移到其自己的基础架构。

在处理用户身份验证时,听起来您需要一个安全的用户存储来充当 oauth2 服务器,并且每个站点都充当 Oauth 客户端。您需要在 OAuth 中使用授权代码流授权类型。

基本上,用户访问站点 A。站点 A 看到他们没有通过站点的会话登录。它重定向到显示登录名的 OAuth 服务器(想想谷歌登录名)。由于站点 A 还传入了回调 url,一旦您登录,OAuth 服务器就会知道将用户重定向到哪里以及有效的令牌信息。然后站点 A 获取该令牌并将其交换为服务器端的访问令牌,因此现在您已在站点 A 上获得身份验证数据。

如果您要实现自己的 OAuth 握手,您应该利用现有的服务器/客户端库。对于 PHP,您可以查看 League OAuth 服务器库,或者使用 Laravel Passport,如果您使用的是 Laravel。其他框架还有其他类似的包。

【讨论】:

    猜你喜欢
    • 2012-09-24
    • 2022-01-11
    • 2018-07-02
    • 2016-10-19
    • 2021-07-10
    • 2018-01-31
    • 2014-07-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多