【问题标题】:Get the UserName of the authenticated (confirmed) user on Lambda?获取 Lambda 上经过身份验证(确认)的用户的用户名?
【发布时间】:2017-11-06 09:56:24
【问题描述】:

在移动应用程序中注册的帐户验证后,我希望 Lambda 函数接收用户 ID。由于这个原因,我在 API Gateway 中创建了 POST API。选中“调用者凭据调用”,并添加了正文映射模板

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

不幸的是,当我在 API Gateway 中对其进行测试时,它给出了 HTTP 错误 404-Not Found Error。

print context.identity

结果

<_main__.CognitoIdentity object at 0x7eg6f79v2bed2>

&

print context.identity.cognito_identity_id

结果

None

甚至,当我从移动应用程序尝试时,只有在我输入验证号后,屏幕上才会出现 HTTP 错误 404-未找到警报。 我已将 AWSLambdaFullAccess 策略和 AmazonAPIGatewayInvokeFullAccess 策略的所有权限授予 Cognito(Auth 和 UnAuth)IAM 角色。 如果您让我知道问题的解决方案,我会很高兴。

Lamda ErrorAPI Gateway PUSH API SeetingsAPI Gateway PUSH API Method

【问题讨论】:

  • 尝试使用 { "sub": "$context.authorizer.claims.sub" }

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


【解决方案1】:

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

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

const cognitoUser = event.requestContext.authorizer.claims;

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

【讨论】:

  • 我使用了IAM授权,该字段不存在
【解决方案2】:

如果您有一个经过身份验证的用户,那么这意味着您有该身份验证的访问令牌传递给 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
});

这段代码在 node 或 javascript 中都很好。

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

希望对你有帮助。

【讨论】:

  • 感谢您的快速响应 Kannaiyan,我想了解在应用程序中用户的注册阶段验证(确认)后,我如何才能仅为该用户自动将访问令牌推送到 Lambda。最后,我不需要之前注册的所有用户 ID,也不需要通过访问令牌调用它们,我只需要当时注册的用户 ID。与其使用访问令牌调用 ID,不如将此信息推送到 Lambda(通过 API 网关或其他方式),我是 aws 服务的初学者,如果您能告诉我解决方案,我会很高兴。亲切的问候...
  • 我打算在 python 中使用相同的方法 (get_user) 在下面的代码中,响应 = client.get_user(AccessToken='string')。我如何将访问令牌从 Cognito 传递到 Lambda 函数。在 get_User 方法中,它提到“服务器响应返回的访问令牌以获取有关用户的信息”。我该如何实施?用户确认(验证)后,此访问令牌应传递给 lambda 函数。 (注意:我的 lambda 函数是从 Cognito-Post Confirmation 触发的)
猜你喜欢
  • 1970-01-01
  • 2020-06-03
  • 1970-01-01
  • 2018-11-26
  • 1970-01-01
  • 2020-07-01
  • 2016-01-17
  • 1970-01-01
  • 2021-04-07
相关资源
最近更新 更多