当前位置: 首页 > 知识库问答 >
问题:

如何使用API网关将Cognito用户池组传递给Lambda上下文?

商绍元
2023-03-14

我在使用Lambda代理集成的API网关后面有几个Lambda函数。每个功能都配置有AWS_IAM授权程序。我能够成功地对Cognito用户池进行身份验证,然后从Lambda事件中检索用户ID,如下所述https://serverless-stack.com/chapters/mapping-cognito-identity-id-and-user-pool-id.html.

但是,我正在努力获取经过身份验证的用户所属的用户池组列表。理想情况下,它们将作为事件的一部分传递,因为Cognito授权人已经拥有此信息。我看到有人提到向方法的集成请求添加映射,但在使用Lambda代理集成时,这似乎不是一个选项。

我也尝试了这里的所有建议,但没有成功。https://github.com/aws-amplify/amplify-js/issues/390

共有1个答案

姬锐
2023-03-14

我不敢相信他们不把这个传进来。我是这么做的:

    - Effect: Allow
      Action:
        - cognito-idp:AdminListGroupsForUser
      Resource: ${self:custom.userPoolArn}

这使得我的lambda函数可以访问AdminListGroupsForUser函数。

使用此处引用的字符串解析函数,您可以获得UserPoolUserId和UserPoolId。我的lambda代码是用python编写的,但思想是一样的:

auth_provider = event['requestContext']['identity']['cognitoAuthenticationProvider']
userPoolUserId = parts[-1] # the last part of the list
userPoolId = parts[0].split('/')[-1]

然后将这些值传递给在上一步中授予权限的管理员列表组浏览器。

cognito = boto3.client('cognito-idp')
groups = cognito.admin_list_groups_for_user(
            UserPoolId = userPoolId,
            Username = userPoolUserId
            )
print(groups)

然后,您将得到一个包含它们所属的所有组的哈希。如果有一群组,您可以将其他参数传递给AdminListGroupsForUser,以获取它们。希望这对你有用!

 类似资料:
  • 我想知道是否可以使用API网关POST方法将YAML有效负载格式传递给AWS Lambda函数。我不想要任何有效载荷的模型,也不想使用模板检查有效载荷。我只想以YAML格式将数据传递给Lambda。有人成功地做到了这一点吗? 我之前使用JSON有效负载将有效负载传递给Lambda,但由于某些设计问题,我觉得YAML格式的有效负载更适合此任务。我尝试在请求正文中传递YAML有效负载,但出现以下错误。

  • 我正在尝试使用此解决方案将我的Api-Gateway地图应用程序/x-wow-form-urlencoded到json:如何从Amazon API Gateway将参数从POST传递到AWS Lambda 但是到目前为止,我的lambda被成功触发,只有我的request.body总是空的。如果有人知道如何使用. net-core c#处理它,我真的很感激洞察力。 到目前为止,我的无服务器lamb

  • 我遵循的方法是,我为每组用户创建一个单独的Cognito用户池。 当用户登录时,他将通过适当的用户池进行身份验证。 为了调用后续的API,我计划使用Lambda Authorizer。 我遇到了下面的链接,以验证ID令牌。 https://github.com/awslabs/aws-support-tools/blob/master/cognito/decode-verify-jwt/decod

  • 我正在配置一个具有各种前端(移动和web应用程序)的应用程序和一个由Lambda提供动力并通过AWS API网关访问的API后端。 由于我正计划使用Cognito对用户进行身份验证和授权,所以我在我的API网关和几个API方法上设置了一个Cognito用户池授权器。 使用这样的体系结构,从OAuth角度来看,我的应用程序(例如iOS或Vue.js应用程序)是客户端应用程序,而我的API网关后端是资

  • 如何在Lambda函数中引用API网关GET查询字符串参数? 当我进行测试时,我可以使用 当我使用post进行测试时,我可以使用body参数作为带有 的事件,使用get请求,但我没有body。我如何使用查询字符串参数,然后在请求中引用它们。我使用什么事件或其他属性来获取查询参数,或者我需要进行什么设置或更改? 在测试时,我引用了event[“username”],对于作为查询字符串参数传递它的AP