【问题标题】:Authenticate app to AWS API Gateway with Cognito使用 Cognito 向 AWS API Gateway 验证应用程序
【发布时间】:2015-12-04 00:57:20
【问题描述】:

以下是我的用例 -

我正在开发一个安卓应用。我正在尝试在其后面使用 aws api 网关和 lambda 函数。 但即使在我登录之前,我也想保护 HTTP 调用并验证我的应用程序。为此,我计划将 cognito 与 API 网关一起使用。所以首先我的电话将转到 cognito,它将对应用程序(而不是用户)进行身份验证,然后我的电话将转到任何 Lamda 函数。我想将所有这些都包含在 api gateway 的 SDK 中。

问题 1 - 是否可以这样做(请参考一些文档或代码)

问题 2 - 是否推荐。还是有更好的方法?

【问题讨论】:

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


    【解决方案1】:

    是的,这是可能的,我认为这是正确的做法。您可以使用 Android SDK 调用 Cognito 并进行身份验证,在 Cognito 中您可以配置给返回的临时 IAM 帐户一个特定角色,该角色应该只有调用 API 网关的权限。 然后,您的客户端可以使用这些临时 IAM 凭证使用生成的 Android SDK 调用 API Gateway(您可以在部署 API 后从 API Gateway 控制台生成它)。 如果您需要跨域 CORS 支持,您必须在 API Gateway 中配置您的 API 端点以受 IAM 保护,并确保在您的资源上创建 OPTIONS 方法。

    【讨论】:

    • 对不起,我又给你添麻烦了,但是如何在我登录之前验证我的应用程序?
    • 您使用 Cognito 登录,您必须将 Cognito 与身份提供者(例如 google/facebook/twitter)连接起来。您不会在身份验证之前访问您的 API 或 lambda,这一切都由 Cognito 处理。
    • 对不起,如果我没有说清楚..我想做的是首先验证应用程序(在应用程序引导时),然后使用 cognito 验证用户我想将 cognito 包装在api网关。所以我对如何做到这一点感到困惑。取自您的评论“您登录 Cognito”,但我必须先验证应用程序。对不起,如果这听起来很愚蠢
    • @SubhamTripathi 您可以在不登录的情况下创建 CognitoCachingCredentialsProvider(这有时称为“访客”访问)。这会给你一些接近“应用程序身份验证”的东西。
    • @BobKinney 我可以假设没有直接的方式来验证应用程序。签名请求在我的用例中可以扮演什么角色,我实现用例的方式是否正确?
    【解决方案2】:

    我知道这可能为时已晚。但对于遇到此问题的人,您可以通过两种方式保护您的 API 端点,具体取决于您的场景。

    如果您当前没有用户目录(登录/注册系统),您可以使用 Cognito 用户池来保护您的 API。步骤是

    1. 在 AWS Cognito 控制台中,创建 Cognito 用户池
    2. 在 API Gateway 控制台中,创建 Cognito 用户池授权者
    3. 在您的 JS 代码中,使用 Cognito 用户池对用户进行身份验证,这将返回一个用户令牌,然后您可以在对 api 进行 Ajax 调用时在 Authorization 标头中使用该令牌。

    这里有一个step-by-step tutorial 关于这个过程的信息。我建议从创建 Cognito 用户池一章开始。

    http://serverless-stack.com/chapters/create-a-cognito-user-pool.html

    第二种情况是,如果您已经有一个用户目录,无论是 Facebook/Twitter 还是任何其他社交登录。您将需要创建一个 Cognito 身份池。您可能会发现这个answer 很有用。

    要使用联合身份,请将 API Gateway 方法设置为使用 “AWS_IAM”授权。您使用 Cognito 创建角色并 将其与您的 Cognito 身份池相关联。然后你使用 授予此角色的身份和访问管理 (IAM) 服务 调用您的 API 网关方法的权限。

    【讨论】:

      猜你喜欢
      • 2023-03-31
      • 2016-08-20
      • 2019-12-22
      • 2017-05-29
      • 2019-12-31
      • 2020-01-05
      • 1970-01-01
      • 2021-09-05
      • 2017-12-30
      相关资源
      最近更新 更多