Я хочу реализовать функцию, в которой есть центральный сайт входа, например: https://example.com, и когда пользователь вводит учетные данные для входа на этой странице и выбирает из раскрывающегося списка, в котором пользователь поддомена хочет войти, пользователь входит в этот поддомен, например https://abc.example.com.
Я использую стек MEAN и токен jwt для аутентификации. Реализация JWT применяется стандартным способом: сначала: запрос отправляется на « / Authenticate », а затем возвращается токен, который будет сохранен в локальном хранилище браузера.
Я успешно выполнил один аутентификация сайта ie. войти в систему из https://example.com и зарегистрировать пользователя в этом домене, но теперь
я хочу реализовать как этот поток =>
На странице входа https://example.com:
- Пользователь может выбрать вариант из раскрывающегося списка, в каком поддомене войти
- После этого пользователь вводит учетные данные для входа (эти учетные данные могут быть разными или одинаковыми для всех поддоменов)
- Пользователь перенаправляется на страницу панели управления этого поддомена (с токеном JWT, хранящимся в локальном хранилище этого выбранного поддомена)
Выше показан поток, который я хочу реализовать, но его можно изменить, если другой поток дает такой же результат
Я искал вопросы и блоги по этому топу c:
Я прошел через SSO ... но я не этого хочу; потому что SSO похож на вход в один поддомен, и он регистрируется везде ... но я хочу войти с одной страницы входа на страницу панели управления поддомена на основе выбора пользователя.
Как я задумал реализовать это (не работает):
Сначала я отправлю запрос «/ аутентификации» на https://example.com с параметром вроде
{ username: "alice", password: "****", subDomainUrl: "https://abc.example.com"}
Мой nodejs бэкэнд аутентифицирует и вернет мне токен JWT. Теперь я перенаправлю на этот поддомен (https://abc.example.com) и отправлю этот токен с https://example.com на https://abc.example.com и каким-то образом он будет сохранен в локальном хранилище этого поддомена (https://abc.example.com). После того, как он будет сохранен в локальном хранилище, я легко могу выполнять другую работу.
Так как это реализовать? Практичен ли описанный выше подход; если то как правильно это сделать? Как лучше всего реализовать такую архитектуру? Любая помощь будет отличной, спасибо!