Как получить идентификатор Cognito Identity id в AWS Lambda

Как получить идентификатор пользователя (вошедшего в систему AWS Cognito), который вызвал функцию AWS Lambda? Должен ли я использовать SDK для функции Lambda для получения идентификатора идентификатора?

5 ответов


Per документы, похоже, что информация о поставщике удостоверений будет доступна только для вызова через мобильный SDK.

чтобы обойти это, один из вариантов-передать идентификатор идентификатора функции вручную как часть события. Если вы делаете что-то вроде AWS.config.credentials = new AWS.CognitoIdentityCredentials(...) тогда вы должны иметь возможность получить ID через AWS.config.credentials.identityId (после обновления учетных данных).

редактировать: лучшим вариантом для проверки подлинности является позволить Cognito / IAM обрабатывать его и предположить, что если пользователь может успешно вызвать лямбда-функцию, это означает, что им разрешено. В этом случае для управления проверкой для каждого пользователя взгляните на белый.


в AWS javascript SDK внутри лямбда-функции просто используйте контекст.тождественность.cognitoIdentityId Это работает для меня


Если вы пройдете через API Gateway, вы можете передать идентификатор cognito (а также ARN пользователя и другую полезную информацию) в Lambda. Это решило проблему для меня.

http://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-mapping-template-reference.html


если кто-нибудь еще наткнется на это, я думаю, что это вам очень поможет.

Примечание это относится только если вы используете Cognito в Авторизатора пользователей бассейн. Если вы хотите использовать AWS_IAM с Cognito Identitys, проверьте мой пример GitHubhttps://github.com/VictorioBerra/js-cognito-auth-example (прочитайте, чтобы изменить область ниже)

если у вас есть" использовать интеграцию лямбда-прокси", то у вас не будет доступа к Отображениям шаблонов запросов. Но вы можете добраться до утверждения внутри токена в вашей лямбда-функции:

exports.handler = (event, context, callback) => {
    //create a response
    const response = {
      statusCode: 200,
      body: JSON.stringify({
          "user email": event.requestContext.authorizer.claims.email,
      }),
    };
    callback(null, response);    
};

EDIT-дополнительная информация для использования AWS_IAM в качестве авторизатора APIG

в основном вам нужно, чтобы ваш APIG был защищен AWS_IAM, и вы должны аутентифицировать через федеративное удостоверение Cognito, которое вернет sessionToken пример использования пулов пользователей. Это делает учетные данные AWS IAM временными. теперь у вас есть все, что вам нужно auth к APIG.

чтобы проверить эту, скачать настольную версию почтальон, бросьте свой URI API (возьмите это из области этапов), а затем под авторизацией заполните 5 полей, необходимых для подписи Sig4. Вы увидите " событие.объект identity в вашей лямбда-функции загружен такими свойствами, как


мое наблюдение заключается в следующем.

Если вы вызываете шлюз API с подписанным запросом, где вы фактически предоставляете ключ доступа, секрет и sessionToken, который вы можете извлечь через (JS SDK):

AWS.config.credentials = new AWS.CognitoIdentityCredentials(...)
AWS.config.credentials.get(..)

и предположил, что ваша лямбда вызывается из API-шлюза через LAMBDA_PROXY и Authorizer AWS_IAM. Вы можете получить доступ только к пользовательским материалам в lambda с:

exports.create = function (event, context) {
   secdata = event.requestContext.identity.cognitoAuthenticationProvider;
}

затем вы получите, помимо прочего, " sub " пользователя Cognito UserPool. Так что если вы действительно хотите узнать больше о пользователе, похоже, вам нужно снова спросить AWS через SDK call.