Аутентификация пользователей на AWS с помощью Cognito для бессерверного веб-приложения React с использованием кодов

Итак, вот мой сценарий: у меня есть веб-приложение, разработанное с бессерверной архитектурой на AWS. Я использую S3 для размещения своего статического контента, и все мои коды на стороне сервера реализованы в функции Lambda и доступны через шлюз API. Теперь я пытаюсь использовать Cognito и пулы пользователей для реализации уровня аутентификации.

Я следовал инструкциям на странице эту страницу и создали пул пользователей. После того, как я это сделал, я могу протестировать свой пул пользователей, введя такой URL-адрес в адресную строку браузера:

https://my_subdomain_under_aws/login?response_type=code&client_id=my_app_client_id&redirect_uri=my_callback_url

Важной частью (для меня) является response_type=code, который, согласно той же документации, также может быть response_type=token. На данный момент я не уверен, в чем их различия и как мне выбрать между ними.

В любом случае, открытие указанного URL-адреса приведет вас к форме входа в систему AWS по умолчанию. Как только пользователь будет успешно аутентифицирован, браузер будет перенаправлен на предоставленный redirect_uri с дополнительным параметром, подобным этому /?code=12345678-1234-1234-1234-123456789012. На данный момент я думаю, что должен извлечь code (используя Javascript на стороне клиента), передать его на шлюз API и использовать его для аутентификации пользователя. Но я не уверен, как это сделать. Я нашел эту страницу объясняя шаги для токенов, но как насчет кодов?


person Mehran    schedule 19.04.2018    source источник


Ответы (1)


Если вы собираетесь использовать грант кода, вам необходимо переслать код на серверную часть API аутентификации и получить от него id_token. В качестве альтернативы вы можете безопасно хранить токен обновления в серверной части, чтобы использовать его для выдачи новых id_token до истечения срока действия текущих. Используя этот id_token, вы можете вызвать свой API, где вы можете проверить id_token в настраиваемой авторизованной Lambda шлюза API или с помощью Cognito Authorizer.

Однако внедрение Cognito можно еще больше упростить с помощью библиотеки AWS Amplify JS. AWS недавно представила это для реализации полного потока аутентификации, чтобы свести к минимуму усилия.

person Ashan    schedule 19.04.2018
comment
Спасибо за знакомство с библиотекой Amplify, обязательно изучу. Но возвращаясь к заданному вопросу, вы говорите, что code не может использоваться непосредственно авторизатором шлюза API так же, как токены, верно? - person Mehran; 19.04.2018