Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 29.07.2021 22:58:35

Как сделать SSO

Здравствуйте, подскажите пожалуйста как правильно реализовать систему единого входа для нескольких проектов на laravel
Как я понял, нужно создать отдельный проект на laravel - auth.site.ru
На нем мы храним только данные пользователя - логин, пароль, почта
На всех проектах убираем авторизацияю/регистрацию и при нажатии на авторизацию/регистрацию редиректим на auth.site.ru
Авторизируемся на auth.site.ru и после успешной авторизации, редиректим на проект, с которого зашли на auth.site.ru
Что мы должны передать с auth.site.ru?
Вариант: после авторизации на auth.site.ru мы генерирем токен и записываем его к авторизированному пользователю в бд и передаем этот токен с редиректом обратно на проект, например - pr.site.ru
На pr.site.ru записываем этот токен к куки и каждый раз отправлять запрос на API auth.site.ru(по токену получаем информацию о пользователе) с токеном из кук
На сколько это безопасно, хранить токен в куках?
На сколько будет большая нагрузка на auth.site.ru, если для получения любой информации(а это например логин в шапке сайта) о пользователе, нужно будет отправлять запрос на auth.site.ru?

Не в сети

#2 03.08.2021 21:43:47

Re: Как сделать SSO

Насколько это безопасно, хранить токен в куках?

Не опаснее, чем хранить идентификатор сессии, что уже делает Laravel. Фактически, токен и есть этот идентификатор - просто случайная строка. Другое дело, что...

каждый раз отправлять запрос на API auth.site.ru(по токену получаем информацию о пользователе) с токеном из кук

...Каждый раз этого делать не нужно, только однажды. Человек зашел на auth, его перебросило назад на pr с токеном в запросе, дальше pr один раз запрашивает auth и делает вид, как будто человек "честно" вошел через форму (т.е. создает сессию и сохраняет туда все, что требуется). Можно и вовсе избежать запроса на auth, если передать всю информацию к pr сразу (можно в зашифрованном виде, если есть закрытые для пользователя данные): https://pr/sso?user=123&name=foo&...

Если же нужно разлогинить пользователя, то это делается уже на стороне сервера без участия браузера - auth сам удаляет сессию из базы pr (и других связанных сайтов).

Не в сети

Подвал раздела