我在使用Lambda代理集成的API网关后面有几个Lambda函数。每个功能都由AWS_IAM授权者配置。我能够针对Cognito用户池成功进行身份验证,然后从Lambda事件中检索用户ID,如此处https://serverless-stack.com/chapters/mapping-cognito-identity-id-and-user-pool-id.html所述。
但是,我一直在努力获取经过身份验证的用户所属的用户池组的列表。理想情况下,由于Cognito授权者已经拥有此信息,因此它们将作为事件的一部分被传递。我已经提到过将映射添加到该方法的Integration Request的提及,但这在使用Lambda代理集成时似乎不是一个选择。
我也很幸运地尝试了所有建议。 https://github.com/aws-amplify/amplify-js/issues/390
答案 0 :(得分:1)
我简直不敢相信他们只是没有将其传递给我。这就是我所做的:
serverless.yaml
以获得权限: - Effect: Allow
Action:
- cognito-idp:AdminListGroupsForUser
Resource: ${self:custom.userPoolArn}
这让我的lambda函数可以访问AdminListGroupsForUser函数。
使用referenced here的字符串解析功能,可以获得UserPoolUserId和UserPoolId。我的lambda代码在python中,但它的想法相同:
auth_provider = event['requestContext']['identity']['cognitoAuthenticationProvider']
userPoolUserId = parts[-1] # the last part of the list
userPoolId = parts[0].split('/')[-1]
然后将这些值传递给您在上一步中授予权限的AdminListGroupsForUser
。
cognito = boto3.client('cognito-idp')
groups = cognito.admin_list_groups_for_user(
UserPoolId = userPoolId,
Username = userPoolUserId
)
print(groups)
然后,您将获得它们所属的所有组的哈希。如果有很多组,则可以将其他参数传递给AdminListGroupsForUser
以获取它们。希望对您有用!