Как объединить авторизацию на нескольких доменах?

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

Задача сделать так, чтобы пользователю достаточно было зарегистрироваться на любом из них. И по этому доступу мог авторизоваться на всех остальных.

Как у Яндекса, например. Регистрируешься в любом из сервисов - аккаунт работает во всех.

Как грамотно спроектировать базу данных под эту задачу?

Видим варианты:

1. База для всех проектов одна. Вариант нежелательный, надо бы разделять доступ. И вопрос производительности, ничего что будет много таблиц одной базе?

2. Таблицу пользователей выносим в отдельную базу. Остальные таблицы у каждого проекта по своим отдельным базам. В этом варианте, не понятно как делать выборки и можно ли вообще, ведь остальные таблицы других баз связаны с таблицей юзеров.

База MySQL.

Как решить эту задачу грамотно?

Возможно есть ссылки, где можно почитать подробнее на этот счет. Заранее спасибо за советы.
  • Вопрос задан
  • 3220 просмотров
Решения вопроса 2
IGHOR
@IGHOR
Qt/C++ DEV/CTO
домен А - авторизационный домен, база одна
домен Б - сайт
домен С - еще один сайт

пользователь заходит на домен Б, пусть регистрируется или авторизируется
1) домен Б генерирует токен или сессию, передает ее в параметре на домен А
2) домен А показывает диалог, проходит авторизация или регистрация
3) домен А генерирует случайный временный токен, передает его в параметре на домен Б, вместе с полученными параметрами от 1.
4) домен Б получает авторизационные Cookie по временному токену и токен удаляется
Ответ написан
Комментировать
@RidgeA
1. Если смежные проекты будут на поддоменах, то можно авторизацию и аутентификацию вынести на общий для всех сайтов сервис, авторизационную куку сетапить в верхний, для всех проектов домен.

2. Если смежные проекты будут на разных доменах - https://oauth.net/2/. Есть реализации серверов и клиентских библиотек на разных языках.

Общий логин для нескольких сайтов в любом случае связан с трудностями работы с пользовательскими данными, т.к. по сути проект не владеет ими. Либо при авторизации запрашивать пользовательские данные с общего сервиса и хранить у себя - в таком случае надо обеспечить синхронизацию данных пользователей между разными сервисами. Либо всю работу с пользовательскими данными вынести на сервис авторизации - это рассылки, например, и т. п.

Общая база - не сильно страшно, но оптимально, конечно, разделить базу между разными проектами - проблемы на одном сайте не будут влиять на работу остальных и авторизации в целом.

Можно хранить все в одной базе если нет сильной нагрузки на нее, но при этом работа с этими таблицами не должна быть напрямую - только через сервис. Это позволит в будущем безболезненно вынести эту базу на отдельный сервер.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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