lambda函数中的AWS身份信息
问题描述:
我有一个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'
}
}
答
Cognito用户池。
当某人成功通过用户池进行身份验证Cognito发出访问令牌,身份令牌和刷新令牌时 - 身份令牌将包含您允许应用从用户池属性访问的所有信息。
身份池(联合登录/ Facebook的等)
当您从前端收到Facebook的令牌,你需要调用fb.api(“/我”),以获取用户信息在后端。
我刚刚完成了一个类似的问题,所以这里是我的建议。就我个人而言,我会编写自己的授权机制,并使用您想要的用户信息发布自己的JWT令牌。
的原因是,你不能让一个Cognito JWT令牌联合身份,将与在Cognito authoriser和端点工作 - 我相信这是在路线图上(虽然我并不了解任何东西特别是在AWS内部进行)。
基本上,如果您同时使用用户池和联合身份验证,则需要一种持续共享用户信息的方法(正如您现在要做的那样),因此发布您自己的JWT是最简单的解决方案。
但我没有发送带有请求的令牌,如果是例如Facebook身份呢? – Sami