2

Насколько я могу судить, функция AWS Lambda не может найти имя пользователя моих пользователей Cognito (я использую UserPools).Есть ли способ получить имя пользователя Cognito в AWS Lambda?

Это кажется очень странным, так как я думал, что приложения везде практически всегда зависят от имени пользователя.

Мне удалось получить Cognito IdentityId, но я не вижу никакого способа связать IdentityId со всем, что ищет пользователя Cognito, к которому относится IdentityId.

Есть ли способ получить имя пользователя? Какова связь между IdentityId и именем пользователя?

ответ

1

Вы можете получить токен JWT из заголовка авторизации, а затем декодировать его с помощью некоторой библиотеки для вашего языка.

В полезной нагрузке JWT указано имя пользователя.

Или вы можете позвонить listUsers на CognitoIdentityServiceProvider (http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/CognitoIdentityServiceProvider.html#listUsers-property) с фильтром sub, который вы получите в {...}authorizer.claims.sub.

+0

Мне нужно получить это на заднем конце. Можете ли вы сделать предложение на заднем конце? –

+1

@DukeDougal Мое предложение для бэкэнда. Посмотрите заголовок авторизации в бэкэнд.Это кодированный токен JWT, который вы можете декодировать и просматривать. Содержит полезные данные. – doorstuck

0

Если передняя ваша функция Lambda с API шлюзом можно использовать Cognito Authorizer для аутентификации пользователей пулов лексемы непосредственно и передать имя пользователя, извлеченным из маркеров через $ context.authorizer.claims.preferred_username

Более подробная информация об этой интеграции приведена здесь: http://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-integrate-with-cognito.html

0

подробно изложив ответ @ doorstuck, если вы используете Lambda, вызванную APIG с авторизацией AWS_IAM. Затем, вы можете получить имя пользователя и другие атрибуты следующим образом:

event.requestContext.identity.cognitoAuthenticationProvider является строкой, которая выглядит как

«cognito-idp.ap-northeast-1.amazonaws.com/ ap-northeast-1_xxxxxxx, cognito-idp.ap-northeast-1.amazonaws.com/ap-northeast-1_xxxxxx: CognitoSignIn: SSSSSSSS "

SSSSSSSS является вспомогательным элементом пользователя в пуле пользователей. Вы можете легко декодировать строку, чтобы получить суб и использовать ее в фильтре listUsers.

Пример:

const provider = 
event.requestContext.identity.cognitoAuthenticationProvider; 
const sub=provider.split(':')[2]; 
const Params = { 
    UserPoolId: 'xxxxxxxxx', /* required */ 
    Filter: "sub=\""+ sub + "\"", 
    Limit: 1 
}; 
cognitoidentityserviceprovider.listUsers(Params, function(err, data) { 
     if (err) console.log(err, err.stack); // an error occurred 
     else console.log(data.Users[0].Attributes);  
}); 

Данные включают в себя полезную информацию о возвращаемом пользователя, где data.Users [0] .Attributes имеет все атрибуты на пользователя. В результате

[ { Username: 'xxxxx', 
Attributes: [Object], 
UserCreateDate: 2017-09-12T04:52:50.589Z, 
UserLastModifiedDate: 2017-10-24T01:50:00.109Z, 
Enabled: true, 
UserStatus: 'CONFIRMED' } ] } 

data.Users [0] .Attributes является

[ { Name: 'sub', Value: 'SSSSSSS' }, 
{ Name: 'address', Value: 'xxxxxxxxi' }, 
{ Name: 'email_verified', Value: 'true' }, 
..... ] 

Обратите внимание, что вы также можете фильтровать возвращаемые атрибуты, используя

AttributesToGet: [ 
    'STRING_VALUE', 
    /* more items */ 
    ], 

в Params.

Смежные вопросы