Вы обеспечиваете обратный вызов URL для службы аутентификации, вы решить, следует ли обращаться вы маршрут по СПУ или API. Аутентификация Oauth (упрощенная) имеет два шага. Иллюстрация на GitHub:
Шаг 1) https://github.com/login/oauth/authorize?client_id=*YOUR_CLIENT_ID*$redirect_uri=*YOUR_REDIRECT_URI*
Открывает всплывающее диалоговое окно, которое запрашивает пользователя авторизовать приложение, в случае успеха возвращается к вашему redirect_uri с параметром запроса кода = AUTHORIZATION_CODE
Шаг 2)? Вы обменяете вышеуказанный AUTHORIZATION_CODE на токен доступа через https://github.com/login/oauth/access_token
В вашей архитектуре вы должны сделать Шаг 1 в SPA и Шаг 2 в остальном api. Вы должны полагаться на спа-центр, чтобы получить код авторизации от поставщика проверки подлинности, отправить его в ваш априори отдыха, позволить остальному api обмену на токен долгосрочного доступа, сохранить этот токен в базе данных, использовать его для извлечения информации пользователя или сделать независимо от того, что вы хотите с ним, затем войдите в систему пользователя.
Для шага 1 для CLIENT_ID и CLIENT_SECRET требуется только CLIENT_ID, поэтому вы можете защитить ваше приложение, сохранив CLIENT_SECRET только на стороне сервера.
Проблема с обратным вызовом uri, обработанная вашим приемом rest api, заключается в том, что callback uri вызывается поставщиком проверки подлинности (в данном случае github), а не вашим SPA, поэтому вы не можете отправить ответ, который перенаправляет пользователя на домашнюю страницу. Это будет работать, только если ваши шаблоны и маршрутизация будут обрабатываться на стороне сервера, что, я полагаю, не так в вашей архитектуре.
Это не очевидно из документации, но когда вы регистрируете промежуточное ПО для паспорта на маршруте, например app.post('/login', passport.authenticate('github'),
, промежуточное программное обеспечение проверяет, содержит ли параметр запроса «код» AUTHORIZATION_CODE, если нет, то он запускает шаг 1, если да шаг 2.
Спасибо, Мартон, но на шаге 2 SPA отправляет токен обратно на отдых api, как можно проверить api? потому что мы можем использовать почтальон для отправки недопустимого токена для отдыха api. –
Я не уверен, что понимаю. Какой токен и почему вы хотите его проверить? – marton