На самом деле мое приложение представляет собой одностраничное приложение (SPA), созданное с использованием VueJS. В моем сценарии использования участвуют 3 компонента:
- Одностраничное приложение (VueJS, VueRoute, VueX), связывающееся с персональным внутренним сервером (библиотека Axios)
- Персональный сервер (NodeJS + MongoDB), включая управление пользователями. (Один пользователь таблицы, имеющий ссылку на другую таблицу поставщиков). Это означает, что один пользователь может зарегистрировать несколько обращений, используя несколько провайдеров. Но в конце концов, это тот же самый пользователь, который идентифицирован).
- Внешний поставщик OAuth (назовем для примера «MIRIA»)
Я хотел бы реализовать поток вызовов, чтобы иметь возможность войти в систему с учетной записью от моего внешнего поставщика OAuth.
В моей одностраничной заявке у меня будет страница входа, предлагающая войти с учетными данными электронной почты / пароля или кнопкой «Войти с помощью MIRIA».
Я буду ожидать следующих шагов:
Когда пользователь нажимает на кнопку «Войти с помощью MIRIA» в браузере, пользователь будет перенаправлен на URL-адрес аутентификации MIRIA. (Client_id и redirect_uri будут предоставлены URL)
Пользователь авторизуется на портале входа в систему MIRIA. Если аутентификация прошла успешно, MIRIA перенаправит пользователя на URL redirect_uri и предоставит код авторизации. Насколько я понимаю, этот URL будет обрабатываться на моем личном бэкэнд-сервере. (или из Javascript?) Когда на мой внутренний сервер по этому URL-адресу поступает запрос, персональный внутренний сервер отправит запрос POST серверу поставщика Oauth на конечной точке access_token. Он получит в ответ access_token.
Когда сервер получает access_token, он должен проверить, существует ли локальная учетная запись с этим письмом. Если да, внутренний сервер перенаправит пользователя на его страницу панели инструментов по умолчанию в приложении VueJS. Если локальный пользователь не найден, внутренний сервер перенаправит пользователя на страницу / регистрация приложения VueJS и предварительно заполнит некоторые поля, такие как электронная почта, полное имя ..., полученные от провайдера. Затем, когда пользователь нажмет кнопку регистрации, будет создана локальная учетная запись со ссылкой на одного поставщика, после чего пользователь сможет войти в систему, используя свои учетные данные электронной почты / пароля или внешнего поставщика.
Что вы думаете об этом процессе? Я на правильном пути?