Как лучше реализовать мультиавторизацию между несколькими проектами Laravel?
Существует основной проект example.com с базой данных пользователей. У этого проекта есть дочерний проект
на поддомене 1.example.com, хотим реализовать единую авторизацию с основным доменом. Session.domain - понятно, SSO через Passport + Socialite тоже рассматриваем как один из вариантов.
Отсюда вопрос: как лучше реализовать данную структуру, при условии, что пользователи хранятся только в одной базе основного проекта? Если при помощи SSO, то как далее получать информацию об остальных пользователях, только при помощи эндпоинтов в API основного домена?
Небольшое уточнение: фронтенд-фреймворки пока что не используем, авторизация так же будет использоваться в мобильном приложении при помощи API.
SESSION_DOMAIN=.example.com
Не вижу в вопросе необходимости усложнять. Если правильно всё "приготовить", то не составит труда переключиться при необходимости на другой метод аутентификации.
Ну в целом, такой вариант и рассматривался. А что касательно работы с таблицей юзеров? Только по эндпоинтам апи основного домена? Например, получить никнеймы авторов комментариев с поддомена, имея только их айди?
Насколько это вообще корректный подход в рамках Ларки?
Не скажу насчёт "корректности", но это всё работает без противорий с принятыми практиками ларавель.
Отдельные connections для SharedUserProvider и session.connection.
Все проекты с единой аутентификаций настроены на работу через эти подключения.
А что касательно работы с таблицей юзеров?
Тут есть варианты... вам виднее. Если брать примитивный вариант, то проблемы вообще нет
class User extends Authenticatable
{
protected $connection='users_connection';
}
class Comment extends Model
{
protected $connection='site_data_connection';
public function users(): HasMany
{
return $this->hasMany(User::class);
}
}
// comments controller
Comment::with('users')->get();
# sql выполняется в разных подключениях
# select * from "comments"
# select * from "users" where "users"."id" in (1, 2)
*/