Поток Oauth 2: должен ли AWS id_token Cognito передаваться в браузер для управления сеансом? - PullRequest
0 голосов
/ 08 февраля 2020

Я создаю приложение, в котором:

  1. У меня есть REST API - / hello
  2. Пользователь должен иметь доступ к этому API, только если он / она вошел в систему .

Для этой цели я решил использовать AWS Cognito и реализовать поток Oauth 2.0.

Теперь, когда пользователь пытается получить доступ / hello, он перенаправляется на AWS Страница входа в Cognito. После входа пользователя мое серверное приложение (содержащее REST API / hello) может получить id_token и access_token из AWS Cognito.

Должен ли я передать этот id_token в браузер и попросить браузер: отправить его при доступе к / hello REST API? Имеет ли это какие-либо последствия для безопасности? Это правильный путь?

Или после аутентификации пользователя я должен создать новый id_token, подписанный моим собственным ключом, и затем отправить его в браузер? Пользователь отправит его обратно при попытке доступа к / hello REST API. Затем я проверю, является ли id_token действительным, используя мой пользовательский ключ.

Цель id_token состоит в том, чтобы проверить, что сеанс пользователя действителен и не истек. Должен ли id_token использоваться для управления сеансом?

1 Ответ

0 голосов
/ 09 февраля 2020

Таким образом, цель состоит в том, чтобы избежать использования файлов cookie в вашем веб-интерфейсе React и использовать вместо них токены с серверной частью без сохранения состояния. Я полностью согласен с этой целью.

ВАРИАНТ 1

Передача токенов из веб-интерфейса в пользовательский интерфейс, который может использовать их для поддержки сеанса на стороне клиента. Для этого требуется конечная точка Spring, которая вызывается через Ajax, и ее необходимо защищать с помощью файлов cookie. В противном случае злоумышленник может вызвать эту конечную точку и получить токены.

OPTION 2

Выполнять обработку входа OAuth в приложении React через клиент oid c библиотека , а не в веб-интерфейсе Spring, так что ваш пользовательский интерфейс представляет собой чистый SPA без cookie. Используйте Spring исключительно как защищенный ресурсный сервер OAuth. Используйте stati c хостинг контента для HTML / JS файлов, возможно, через AWS Cloudfront.

МОИ РЕШЕНИЯ

Если интересует вариант 2 I есть демо-приложение React, которое работает так и подключается к Cognito. Вы можете запустить его самостоятельно с моей страницы быстрого запуска .

Вот код SPA OAuth . В то же время мой Spring Sample действует только как Rest API и не выполняет никакой обработки входа в систему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...