lambda函数

时间:2017-04-26 13:12:59

标签: lambda aws-api-gateway amazon-cognito

我有一个AWS网关API,配置为由AWS_IAM授权,我使用Cognito Identity池对用户进行身份验证,并且此API配置为触发lambda函数。

现在,当调用lambda函数时,我能够通过event参数获取传递给lambda的requrestContext对象中的identityId和identityPoolId。我的问题是如何在这个lambda函数中获取用户的信息(来自cognito用户池或任何其他身份提供商,如facebook,google ...)?我是否需要进行任何配置才能在事件参数中包含用户的信息?或者我应该使用某种AWS SDK功能?
这是我在事件参数中收到的requestContext:

{
    requestContext:{
      accountId:'1234567890',
      resourceId:'abcdef',
      stage:'test',
      requestId:'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx',
      identity:{
        cognitoIdentityPoolId:'us-west-2:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx',
        accountId:'1234567890',
        cognitoIdentityId:'us-west-2:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx',
        caller:'ABCDEFGHIJKLMNOPQRSTUV:CognitoIdentityCredentials',
        apiKey:null,
        sourceIp:'0.0.0.0',
        accessKey:'ABCDEFGHIJKLMNOPQRSTUV',
        cognitoAuthenticationType:'authenticated',
        cognitoAuthenticationProvider:'cognito-idp.us-west-2.amazonaws.com/us-west-2_xxxxxxxxx,cognito-idp.us-west-2.amazonaws.com/us-west-2_xxxxxxxxx:CognitoSignIn:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx',
        userArn:'arn:aws:sts::1234567890:assumed-role/xxx-role/CognitoIdentityCredentials',
        userAgent:'axios/0.16.1',
        user:'ABCDEFGHIJKLMNOPQRSTUV:CognitoIdentityCredentials'
      },
      resourcePath:'/users',
      httpMethod:'GET',
      apiId:'xxxxxxxx'
    }
}

2 个答案:

答案 0 :(得分:0)

您可以在Lambda中使用来自Cognito的访问密钥get the user information

答案 1 :(得分:0)

Cognito用户池。

当某人成功通过用户池进行身份验证时,Cognito会发出访问令牌,身份令牌和刷新令牌 - 身份令牌将包含您允许应用从用户池属性访问的所有信息。

身份池(联合登录/ Facebook等)

当您从前端收到Facebook令牌时,您需要拨打fb.api(' / me')以获取后端的用户信息。

我刚刚完成了类似的问题,所以这是我的建议。就个人而言,我会编写您自己的授权机制,并使用您想要的用户信息发布您自己的JWT令牌。

原因是您无法获得Cognito JWT令牌以获得可与Cognito授权人和端点一起使用的联合身份 - 我相信这是在路线图上(尽管我并不知情)特别是在AWS内发生的任何事情。)

基本上,如果您同时使用用户池和联合身份,则需要一种方法来持续共享用户信息(正如您现在尝试的那样),因此发布您自己的JWT是最简单的溶液