Как получить идентификатор 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. Это решило проблему для меня.
если кто-нибудь еще наткнется на это, я думаю, что это вам очень поможет.
Примечание это относится только если вы используете 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.