Поиск пользовательского пула cognito на основе идентификатора пула Cognito dentity в API Gateway - PullRequest
0 голосов
/ 28 октября 2018

Я новичок в AWS, поэтому, пожалуйста, будьте осторожны со мной :) Я настроил проверку концепции для проверки аутентифицированного API, поддерживаемого lambda, со следующими компонентами.

API Gateway -> backed byЛямбда-федеративные удостоверения, поддерживаемые AWS Cognito UserPool У меня есть настройка авторизатора в шлюзе API для использования роли IAM, предоставляемой пулом федеративных удостоверений.

Я вижу, как проходит идентификация (ap-southeast-2:<GUID>)в шлюз (используя это в моем шаблоне сопоставления запросов на интеграцию "$context.identity.cognitoIdentityId") из https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-mapping-template-reference.html#context-variable-reference

Из шлюза или лямбды как я могу разрешить 'ap-southeast-2:<GUID>' обратно в исходный идентификатор, который находится у пользователябассейн.(Например, извлеките из него один из пользовательских атрибутов)

Другая информация, если она уместна, я использую Amplify-AWS для клиента, вызывающего шлюз API.

TIA.

1 Ответ

0 голосов
/ 28 октября 2018

Как вы заметили, Cognito в качестве поставщика удостоверений отличается от Cognito в качестве пула пользователей.

  • Федеративные удостоверения предоставляют способ предоставления кому-либо идентифицированного доступа к вашему AWS.Ресурсы.identity_id, который дает вам провайдер идентификации, можно считать кодом отслеживания.CIP (Congito [Federated] Identity Provider) позволяет вам получить идентификационный идентификатор, выполнив вход через любое количество провайдеров (не только пул пользователей), и даже вообще не выполнив вход.

  • Пользовательские пулы предоставляют вам способ управления пользователями для вашего приложения (т. Е. Набор имен пользователей, электронных писем, паролей и т. Д.).

Это причина получения от identity_idОбратно к пулу пользователей сложно (потому что, нет никакой гарантии, что является пользователем пула пользователей, вполне может быть кто-то из Facebook).

Из того, что вы сказали, однакоПредположение о том, что identity_id получено от аутентификации UserPool, является безопасным.Это означает, что у вас есть два варианта:

Официальный способ будет использовать удостоверение: GetOpenIdToken для преобразования identity_id (вы можете игнорировать часть loginsзапрос) в токен OpenId.Затем вы можете использовать этот токен против конечной точки userpools: GetUser .Здесь есть несколько ловушек, таких как обеспечение аутентификации с помощью области, которая позволяет вам видеть все атрибуты, которые вас интересуют.

Любопытно, однако, что значение cognitoAuthenticationProvider не является непрозрачным и может (не официально)быть декодирован:

  // Cognito authentication provider looks like:
  // cognito-idp.us-east-1.amazonaws.com/us-east-1_xxxxxxxxx,cognito-idp.us-east-1.amazonaws.com/us-east-1_aaaaaaaaa:CognitoSignIn:qqqqqqqq-1111-2222-3333-rrrrrrrrrrrr
  // Where us-east-1_aaaaaaaaa is the User Pool id
  // And qqqqqqqq-1111-2222-3333-rrrrrrrrrrrr is the User Pool User Id

Приведенный выше пример с более подробной информацией о том, как вы можете затем использовать это с userpools: AdminGetUser , можно найти здесь: https://serverless -stack.ком / глава / картирование-Cognito-идентичность Ид и пользователи бассейн-id.html

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