@ASiD

Какую авторизацию сделать на сайте?

Добрый день. Есть публичный сайт. Нужно сделать авторизацию для пользователей.
Раньше делал сайты на PHP, использовал авторизацию через куки и сессии. Новый сайт на ReactJS (frontend) + PHP (backend). Нашёл в интернете не мало различных вариантов для организации авторизации, но не могу определиться какой лучше использовать в моём случае. Сейчас сайт на одном сервере, но есть перспективы роста.

Подскажите, какую авторизацию выбрать в 2020 году? Так сказать best practices.
  • Вопрос задан
  • 1003 просмотра
Пригласить эксперта
Ответы на вопрос 3
Lebezniy
@Lebezniy
Веб разработка
Можете рассмотреть вариант использования JWT в PHP: Авторизация на сайте с JSON Web Token
Ответ написан
nki
@nki
bezkart.ru готовая система лояльности
Сделайте вариант авторизации через соцсети.
Ответ написан
alexfilus
@alexfilus
Senior backend developer
Самое простое - использовать стандартные сессии PHP, только настроить хранение в redis, или чём-то подобном.
https://gist.github.com/Alexfilus/0c55972103f28699...
Вот пример. Единственное ограничение - хранилище сессий должно умещаться на одном сервере. Вы говорите что есть перспективы того что сайт перестанет умещаться на 1 сервере, но что именно перестанет справляться с нагрузкой? Обычно этого не PHP, и не Redis, а основная РСУБД.
Есть ещё вариант sticky sessions, но это уже костыль.
Классический JWT хорош всем, кроме того что это накладные расходы на шифровку - дефировку подписей, и невозможно сделать кнопку типа "Разлогинь меня на всех устройствах". То есть даже если юзер подозревает что у него украли пароль, или JWT токен, он не сможет разлогинить злоумышленника, даже сменив свой пароль. Только ждать пока срок действия токена кончится.
Часто рекомендуют вариант с access_token и refresh_token. Это довольно надёжно, и можно управлять их хранением, но по сути, те же sticky sessions.
В общем, лучше всего сделать микросервис авторизации, на базе сессий, и пока этот микросервис способен жить на одном сервере, его не трогать. А такая простая штука должна выдерживать тысячи запросов в секунду на 1 ядро.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы