2017-04-26 135 views
2

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

现在,当调用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' 
    } 
} 

回答

0

您可以使用您的拉姆达从里面的Cognito访问关键get the user information

+0

但我没有发送带有请求的令牌,如果是例如Facebook身份呢? – Sami

0

Cognito用户池。

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

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

当您从前端收到Facebook的令牌,你需要调用fb.api(“/我”),以获取用户信息在后端。

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

的原因是,你不能让一个Cognito JWT令牌联合身份,将与在Cognito authoriser和端点工作 - 我相信这是在路线图上(虽然我并不了解任何东西特别是在AWS内部进行)。

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