Получение данных групп пула пользователей Cognito в функции Lambda - PullRequest
0 голосов
/ 13 июня 2018

Я использую пул пользователей Cognito для аутентификации в AWS.Когда авторизованный пользователь обращается к API, я хочу получить группу пула пользователей Cognito, в которой присутствует пользователь.Я пробовал много способов, таких как

{
    "role" : "$context.identity.role",
}

и

{
    "arn": $context.identity.userArn
}

(Выше приведены лишь примеры, которые я пробовал)

Но я получаю данные в виде пустой строки,Пожалуйста, помогите мне решить эту проблему.

Спасибо ...

Ответы [ 2 ]

0 голосов
/ 03 декабря 2018

Это может быть достигнуто с помощью 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

0 голосов
/ 13 июня 2018

Если вы добавляете контекст в авторизаторе, этот контекст будет доступен в лямбда-выражении event.requestContext.authorizer

обратите внимание, что это добавление контекста в ответе авторизатора

{
  Version: "",
  Statement: ...,
  Context: {
     myProperty: "something"
  }
}

https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-use-lambda-authorizer.html

РЕДАКТИРОВАТЬ: только что заметил, что вы могли бы использовать Cognito Authorizer вместо пользовательского авторизатора, который в этом случае может помочь вам

https://forums.aws.amazon.com/thread.jspa?threadID=238437

вы предполагаете получить информацию о пользователе через

$context.authorizer.claims.sub
...