AWS Cognito,Lambda,DynamoDB中的用户凭据

时间:2016-02-01 21:19:47

标签: facebook amazon-web-services aws-lambda amazon-cognito

我在客户端站点上使用Facebook登录和AWS Cognito建立了身份验证流程。工作良好。但是现在我需要在dynambodb表中使用其facebook id引用用户。当然,我可以调用通过AWS API网关公开的AWS lambda函数,但是如何验证API调用实际上是否具有有效的facebook id并且此facebook id与AWS Cognito Id匹配。也许我在这里遗漏了一些东西,我希望你们能指出我正确的方向;)谢谢!

2 个答案:

答案 0 :(得分:3)

如果您可以通过cognito id而不是facebook id键入ddb表,则可以使用cognito凭据调用api网关。如果您在调用lambda时使用被调用者凭据,则可以通过令牌$context.identity.cognitoIdentityId访问cognito id。这可以确保此ID的所有者进行了呼叫。您可以进一步检查$context.identity.cognitoAuthenticationProvider是否为graph.facebook.com,以确保他们通过Facebook进行操作。不幸的是,facebook ID没有在凭证中传递,所以如果你需要它,你需要一个查找表,将cognito id映射到facebook id。有关可用令牌的更多详细信息,请参阅here

答案 1 :(得分:1)

我建议您执行以下操作(我也是AWS的新手,如果您有任何建议请告诉我):

  1. 创建一个API网关/fblogin端点,您将在其中发布Facebook访问令牌(您将在客户端使用Facebook进行身份验证以获取此令牌)。该端点与Lambda函数相关联,如fb_login
  2. fb_login功能中,您将使用Amazon Cognito进行身份验证以获取其凭据。您应该已在Cognito中创建了联合身份用户池,并为此用户池分配了适当的角色。如果您希望仅将API限制为经过身份验证和授权的用户,这会有所帮助。因此,Cognito的结果将包含IdentityIdCredentials。您可以根据请求/fblogin将其退回。
  3. 使用上述结果,您可以在API网关(Or you can use AWS custom generated SDK for your API to handle the signing)上对您发送给API的请求进行签名。在API网关端点上,启用CORS和身份验证AWS_IAM。这样,API Gateway通过检查请求中的签名自动验证用户。您可以像其他人建议的那样从$context.identity.cognitoIdentityId获取用户ID。这样,您就可以确保用户已获得授权和身份验证。
  4. 注意:确保在HTTPS上实施/fblogin端点,然后FB Access令牌将是安全的。如果没有,它将作为HTTP上的纯文本显示。

    此外,使用Dynamo DB表作为CognitoID - FacebookID的日志。如果您自己或您认为合适的任何内容,您可以将其纳入Step 2 Lambda函数中。