【问题标题】:AWS Cognito, Lambda, User credentials in DynamoDBAWS Cognito、Lambda、DynamoDB 中的用户凭证
【发布时间】:2016-05-10 11:53:07
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

    如果您可以通过 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

    【讨论】:

    • 只是为了确保我理解:使用 AWS Cognito 时,没有安全的方法可以将 facebook id 检索并保存到 dynamodb 中?
    • 有很多方法,但您需要自己维护 cognito id 和 facebook id 之间的链接,并以安全的方式设置该链接。如果您只是要拥有 facebook 用户,您可以查看 web identity federation:docs.aws.amazon.com/IAM/latest/UserGuide/… 这样您在 ddb 中的密钥可以是 facebook id。
    • 谢谢,AWS 一开始可能会有点不知所措。肯定是一个很棒的基础设施!
    【解决方案2】:

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

    1. 创建一个 API Gateway /fblogin 端点,您将在其中发布 Facebook 访问令牌(您将在客户端通过 Facebook 进行身份验证以获取此令牌)。该端点链接到一个 Lambda 函数,例如 fb_login
    2. fb_login 函数中,您将使用 Amazon Cognito 进行身份验证以获取其凭证。您应该已经在 Cognito 中创建了一个 Federated Identity 用户池,并为该用户池分配了适当的角色。如果您只想将 API 限制为经过身份验证和授权的人,这将很有帮助。因此,来自 Cognito 的结果将有 IdentityIdCredentials。您可以根据您的请求将它们退回给/fblogin
    3. 使用上述结果,您可以对发送到 API 网关 (Or you can use AWS custom generated SDK for your API to handle the signing) 上的 API 的请求进行签名。在 API Gateway 端点上,将 CORS 和身份验证启用为 AWS_IAM。这样,API Gateway 通过检查请求中的签名来自动验证用户。您可以按照其他人的建议从 $context.identity.cognitoIdentityId 获取用户 ID。这样,您可以确保用户已获得授权和身份验证。

    注意:确保在 HTTPS 上实现 /fblogin 端点,那么 FB 访问令牌将是安全的。如果没有,它将在 HTTP 上显示为纯文本。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-09-05
      • 2018-05-31
      • 2017-11-26
      • 2020-06-06
      • 2019-12-06
      • 2017-03-25
      • 1970-01-01
      • 2019-09-15
      相关资源
      最近更新 更多