【问题标题】:How to lock down access between tenant users in a multi tenant laravel application如何在多租户 laravel 应用程序中锁定租户用户之间的访问
【发布时间】:2020-04-26 17:21:43
【问题描述】:

我正在构建一个多租户 Laravel 应用程序,其中每个租户都有自己的数据库(包括用户表)。

租户由 TenantServiceProvider 中的子域标识,当它计算出租户 ID 时,连接将更改为使用适当的数据库。

一切都按预期工作,但是我遇到了一个重大的安全问题。

我以 ID 1 的用户“John Doe”身份登录到tenant1.mysite.com

我将 url 更改为tenant2.mysite.com,现在我以“Jane Doe”的身份登录,他在 tenant2 站点上的 ID 为 1。

如何防止 John Doe 的会话在其他租户的站点上使用?

【问题讨论】:

    标签: php laravel


    【解决方案1】:

    一种方法;在您的 Authenticate 中间件中放置一个块,例如;

    当用户登录成功时,将值tenant1放入用户会话中的指定键中。

    Session::put('domain', 'tenant1');

    在同一个中间件中,即使认证正确,检查用户的会话是否与子域名匹配。如果它们匹配,那么您继续用户,否则将他重定向到登录页面。

    Session::get('domain') === $this->getSubDomain($request)

    public function getSubDomain(Request $request): string
    {
        $urlSegments = explode('.', parse_url($request->url(), PHP_URL_HOST));
    
        return $urlSegments[0]; // this will return "tenant1"
    }
    

    不要忘记在用户注销后从会话中删除domain

    【讨论】:

      猜你喜欢
      • 2013-06-05
      • 1970-01-01
      • 2018-01-09
      • 2017-03-29
      • 2020-06-18
      • 1970-01-01
      • 2020-06-17
      • 2015-12-30
      • 1970-01-01
      相关资源
      最近更新 更多