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

在Lambda函数中获取Cognito用户属性

穆阳炎
2023-03-14

我正在使用AWS Amplify创建一个Lambda函数、RESTAPI和Cognito用户池。我想检索向endpoint发出请求的Cognito用户,以便访问他们的用户属性。

我为函数选择了无服务器Express模板:

app.js

app.post('/do-something', async (req, res) => {
  // The user pool ID is available as an environment variable.
  // I want to get the user and use their user attributes here.
});

客户端配置根据当前用户的令牌设置授权头:

应用程序。js

Amplify.configure({
  API: {
    endpoints: [
      {
        name: "sampleCloudApi",
        endpoint: "https://xyz.execute-api.us-east-1.amazonaws.com/Development",
        custom_header: async () => { 
          return { Authorization: `Bearer ${(await Auth.currentSession()).getIdToken().getJwtToken()}` }
        }
      }
    ]
  }
});

事件(req.apiGateway.event)或上下文是否保存用户信息?或者我可以以某种方式使用授权标头吗?

另外,在Lambda函数中进行Cognito调用会是什么样子?这是否需要使用管理API?

谢谢

共有1个答案

梁丘亦
2023-03-14

您可以使用context通过Lambda上下文对象获取用户的联邦标识ID。身份cognitoIdentityId,但这只是与Cognito标识池中的用户关联的ID,而不是Cognito用户池。

我所看到的在Lambda中获取用户池属性的最佳方法是使用自定义授权程序,传入由SDK在客户端生成的JWT令牌,并在服务器端解码。授权用户并解码JWT令牌后,您的Lambda将能够访问context.authorizer.claims中的用户池属性。这里有一篇文章穿过定制授权程序:https://aws.amazon.com/blogs/mobile/integrating-amazon-cognito-user-pools-with-api-gateway/

 类似资料:
  • 我有一个Lambda函数来处理由API网关触发的POST请求。后者设置为通过Cognito用户池授权器进行授权。授权有效-如果我传递了一个用户的ID令牌,请求就会被处理,如果我不传递,我就会得到一个401。 但是,我无法在Lambda函数中获取授权用户的身份。所有的文档都让我相信它应该在上下文中,但它不是。我也无法将它映射到上下文中。此外,似乎也没有一种方法可以查询给定ID令牌的用户的用户池。 我

  • 我正在使用AWS Congito用户池进行帐户管理,其中Cognoto标识池将此用户池作为标识提供者。我用它来控制通过API网关对API的访问,API网关向Lambda发送请求。我的Lambda是使用Micronaut用Java8实现的。所有这些都很好。 在Lambda中,我从中的获得名称: 在Cognito标识符的字符串名称中返回的是什么。像这样的东西: us-east-1:xxxxe650-5

  • 我想从AWS IAM获取用户详细信息,因此我创建了一个lambda函数,但响应代码502有一个错误。我的代码如下。

  • 我正在使用AWS Lambda+API网关+无服务器(Python)。太神奇了!

  • 问题内容: 我有一个如下所示的span标签,单击该标签会在控制器中调用一个函数。 HTML 控制者 我需要在控制器功能的data属性中获取值。我尝试使用此关键字和$ event; 没人工作。 请帮忙。 问题答案: 尝试将其直接传递给ng-click函数: 然后它应该在您的处理程序中可用: 这是一个例子

  • 一旦用户登录到Cognito,我希望使用lambda函数获取与该用户关联的当前角色。 似乎Cognito用户池或身份池将用于移动应用程序,而前端开发人员? 正确的做法是什么?代码示例总是很好,但我更喜欢寻找逻辑解决方案或文档链接。 我尝试了亚马逊认知身份(这不是我要找的),并阅读了所有(?)留档这件事,但我不能在这里连接点...