使用 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。步骤为
- 在 AWS Cognito 控制台中,创建一个 Cognito 用户池
- 在 API 网关控制台中,创建一个 Cognito 用户池授权器
- 在你的 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.
以下是我的用例 -
我正在开发 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。步骤为
- 在 AWS Cognito 控制台中,创建一个 Cognito 用户池
- 在 API 网关控制台中,创建一个 Cognito 用户池授权器
- 在你的 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.