Это может быть достигнуто с помощью Cognito Identity Service Provider из AWS SDK.
Вы можете извлечь пользовательскую подпункт (субъект) из event.requestContext.identity.cognitoAuthenticationProvider следующим образом:
let userSub = event.requestContext.identity.cognitoAuthenticationProvider.split('CognitoSignIn:')[1]
let UserPoolId = event.requestContext.identity.cognitoAuthenticationProvider.split(',')[0].split('/')[1]
Вы можете использовать это вместе с идентификатором пула пользователей, который также может быть извлечен из вышеуказанного значения в функции listUsers поставщика услуг идентификации Cognito для получения пользователей. Имя пользователя:
let userParams = {
UserPoolId,
Filter: 'sub=\"' + userSub + '\"',
Limit: 1
}
try {
const users = await cognitoISP.listUsers(userParams).promise()
Username = users.Users[0].Username
} catch (e) {
// Handle your error
}
см. https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/CognitoIdentityServiceProvider.html#listUsers-property
Это имя пользователя вместе с идентификатором пула пользователей будет затем использоваться с функцией adminListGroupsForUser из поставщика услуг идентификации Cognito для получения массива групп, к которым принадлежит пользователь:
try {
let data = await cognitoISP.adminListGroupsForUser({
UserPoolId,
Username
}).promise()
groups = data.Groups
} catch (e) {
// Handle your error
}
см .: https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/CognitoIdentityServiceProvider.html#adminListGroupsForUser-property
Ваши лямбда-функции должны иметь доступ к следующему в вашем пуле cognito:
- cognito-idp:ListUsers
- cognito-idp:AdminListGroupsForUser
см .: https://docs.aws.amazon.com/cli/latest/reference/cognito-idp/index.html