使用 Cognito 向 AWS API 网关验证应用程序

Authenticate app to AWS API Gateway with Cognito

以下是我的用例 -

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

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

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

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

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

如果您目前没有用户目录(login/signup 系统),您可以使用 Cognito 用户池来保护您的 API。步骤为

  1. 在 AWS Cognito 控制台中,创建一个 Cognito 用户池
  2. 在 API 网关控制台中,创建一个 Cognito 用户池授权器
  3. 在你的 JS 代码中,使用 Cognito 用户池验证用户,这将 return return 你一个用户令牌,然后你可以在授权头中使用令牌 Ajax 调用 api.

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

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

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

To use a federated identity, you set the API Gateway method to use “AWS_IAM” authorization. You use Cognito to create a role and associate it with your Cognito identity pool. You then use the Identity and Access Management (IAM) service to grant this role permission to call your API Gateway method.