获取Lambda上经过身份验证(确认)的用户的UserName?

时间:2017-10-29 11:11:41

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

在移动应用中注册的帐户经过验证后,我希望Lambda函数能够接收用户ID。由于这个原因,我在API网关中创建了POST API。 "使用来电者凭证进行调用"已选中,并且身体映射模板已添加为

{ "identity": "$input.params('identity')" }

不幸的是,当我在API网关中测试它时,它会提供HTTP错误404-未找到错误。

print context.identity

结果为

<_main__.CognitoIdentity object at 0x7eg6f79v2bed2>

&安培;

print context.identity.cognito_identity_id

结果为

None

即便如此,当我尝试使用移动应用时,只有在我输入验证码后,屏幕上才会显示HTTP Error 404-Not Found警报。 我已将所有权限作为AWSLambdaFullAccess策略和AmazonAPIGatewayInvokeFullAccess策略授予Cognito(Auth和UnAuth)IAM角色。  如果您让我知道问题的解决方案,我将很高兴。

Lamda ErrorAPI Gateway PUSH API SeetingsAPI Gateway PUSH API Method

2 个答案:

答案 0 :(得分:1)

如果在该端点上使用COGNITO_USER_POOLS进行授权,则可以将“授权”标头设置为发布请求中的idToken。然后,API网关验证令牌并将其传递给函数。

然后在您的lambda函数中,您应该能够像这样访问Cognito用户对象。

const cognitoUser = event.requestContext.authorizer.claims;

我更喜欢@ Kannaiyan的回答,因为您不必再​​拨打电话来获取用户数据。

答案 1 :(得分:0)

如果您有经过身份验证的用户,则表示您具有传递给lambda的身份验证的访问令牌,

使用Access Token,您可以获取用户信息及其属性。

http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/CognitoIdentityServiceProvider.html#getUser-property

var params = {
  AccessToken: 'STRING_VALUE' /* required */
};
cognitoidentityserviceprovider.getUser(params, function(err, data) {
  if (err) console.log(err, err.stack); // an error occurred
  else     console.log(data);           // successful response
});

此代码在节点或javascript中很好。

如果您使用其他SDK,它将具有类似的签名。

希望它有所帮助。