使用Cognito向AWS API Gateway验证应用程序

时间:2015-09-08 11:04:43

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

以下是我的用例 -

我正在开发一个Android应用程序。我试图在它的后面使用aws api网关和lambda函数。 但即使在我登录之前,我想保护HTTP调用并验证我的应用程序。为此,我计划将Cognito与API网关结合使用。所以首先我的电话将转到认证应用程序(不是用户)的认知,然后我的电话将转到任何Lamda功能。我想在api网关的SDK中包含所有这些内容。

问题1 - 甚至可以这样做(请参考我的一些文档或代码)

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

2 个答案:

答案 0 :(得分:4)

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

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

  1. 在AWS Cognito控制台中,创建一个Cognito用户池
  2. 在API网关控制台中,创建一个Cognito用户池授权程序
  3. 在您的JS代码中,使用Cognito用户池对用户进行身份验证,然后返回给您一个用户令牌,然后在对api进行Ajax调用时可以在Authorization标头中使用该令牌。
  4. 这是流程中的step-by-step tutorial。我建议从创建Cognito用户池章节开始。

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

    第二种情况是,如果您已经拥有Facebook / Twitter或任何其他社交登录的用户目录。您需要创建一个Cognito Identity Pool。您可能会发现此answer很有用。

      

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

答案 1 :(得分:1)

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