Как заблокировать доступ между пользователями-арендаторами в мультитенантном приложении laravel - PullRequest
0 голосов
/ 26 апреля 2020

Я нахожусь в процессе создания приложения мультитенанта Laravel, где у каждого арендатора есть своя собственная база данных (которая включает в себя таблицу пользователей).

Арендатор идентифицируется субдоменом в TenantServiceProvider, и соединение меняется на использование соответствующей базы данных, когда выясняется идентификатор клиента.

Все работает, как я ожидал по серьезной проблеме безопасности.

Я захожу на tenant1.mysite.com как пользователь "John Doe" с ID 1

Я изменяю URL на tenant2.mysite.com и сейчас вошел в систему как «Джейн Доу» с идентификатором 1 на сайте tenant2.

Как я могу предотвратить использование сеанса Джона Доу на сайте другого арендатора?

1 Ответ

1 голос
/ 26 апреля 2020

Один из способов сделать это; в промежуточном программном обеспечении 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 из сеанса после того, как пользователь вошел в систему- вне.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...