#python #reactjs #oauth-2.0 #single-page-application
Вопрос:
В настоящее время я работаю над потоком oauth и не знаю, как передать объект пользователя обратно в мое приложение SPA.
Этапы потока приведены ниже
1)Приложение SPA отправляет запрос на вход в мой сервер. (должно ли это быть get или post?)
2)Серверная часть создает URL-адрес авторизации и перенаправляет его поставщику аутентификации.
3)пользователь завершает аутентификацию, а поставщик аутентификации выполняет обратный вызов на мой сервер с действительным кодом авторизации.
4)Затем серверная часть анализирует код и обменивает его на токен. Этот токен будет обладать необходимыми атрибутами для создания пользовательского объекта.
5)Я застрял на этом шаге, чтобы узнать, как передать этот пользовательский объект в мое клиентское приложение SPA, так как в это время мне нужно выполнить перенаправление?. Я думаю прямо на ступеньках?
Спасибо!
Ответ №1:
Безопасность SPA — это глубокая тема, но рекомендации 2021 года заключаются в том, чтобы хранить данные OAuth в строго зашифрованных файлах cookie SameSite для большинства сценариев.
МОДЕЛЬ ВЕБ-САЙТА
В настоящее время вы используете архитектуру веб-сайта для SPA, где доставка контента и код OAuth смешаны вместе. Вы можете решить свою проблему следующим образом:
- Напишите один или несколько защищенных только по протоколу HTTP AES256 зашифрованных файлов cookie SameSite после входа в систему, содержащих данные, которые понадобятся SPA
- Затем SPA вызывает GET /userinfo, чтобы «отразить файлы cookie» и получить то, что ему нужно
- Возможно, вам потребуется использовать SameSite=lax, чтобы предотвратить удаление файла cookie после перенаправления
- При выходе из системы срок действия этих файлов cookie должен истечь
ЗАДНЯЯ ЧАСТЬ ДЛЯ ПЕРЕДНЕЙ ЧАСТИ
Для более современного решения SPA может реализовать OAuth на основе API, чтобы лучше разделить проблемы с веб-интерфейсом и API. Эти ресурсы показывают, как это сделать с помощью простого кода и наилучших преимуществ:
Комментарии:
1. Спасибо за ваш комментарий. Таким образом, вы хотите сказать, что на шаге 5 я зашифрую свой файл cookie в своем бэкэнде и отправлю его в SPA?
2. Да — это обычное решение после того, как серверная часть веб-сервера завершит вход в систему и перед перенаправлением. Затем SPA может отправить файл cookie на серверную часть после завершения перенаправления, чтобы запросить данные пользователя из файла cookie.
3. какую выгоду дает шифрование, кроме того, что кто-то просматривает файл cookie, чтобы увидеть его ценность? Если я хочу сохранить значение, которое не является критичным (например, идентификатор пользователя), имеет ли смысл шифровать?
4. Шифрование важно для безопасных файлов cookie, используемых для доступа к внутренним данным — они всегда зашифрованы в таких технологиях, как Java Spring Boot, .Net Core и т.д., Которые Возникают
auth cookies
после обработки ответов OAuth. Если вы не используете файл cookie в качестве учетных данных для доступа к данным, шифрование может быть менее важным.