如何为未经身份验证的API网关请求添加默认限制API密钥以防止滥用?

时间:2017-09-25 10:39:13

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

我想为未经身份验证的请求添加默认的限制API密钥,以防止滥用。

我如何在API网关中执行此操作?

修改

为了更清楚地了解我需要的内容,如何在API网关中转换请求?这可能吗?

3 个答案:

答案 0 :(得分:1)

我想说使用Cognito是授权API网关的最佳方式。

如果您需要默认API密钥,则可以使用自定义API网关授权程序。请查看相同here

的官方文档

答案 1 :(得分:1)

您需要将API密钥存储在应用程序的服务器端,并且不应将其公开给客户端(尽管API密钥不被视为安全令牌,恶意方可以使用它来调用您的API )。

根据使用API​​的应用程序的性质,您有几种选择。

  • 如果是在S3中托管前端的单页Web应用程序,您可以使用AWS CloudFront将API密钥存储在标头中并将其转发到API网关,同时还通过相同的CloudFront分发服务前端。这还将消除Web应用程序和API网关之间的跨源资源共享问题。
  • 如果您有Web服务器,则可以将API密钥存储在Web服务器上,并在设置API密钥标头值时用于代理API网关请求。

注意:请勿使用API​​密钥进行身份验证,不建议使用。

答案 2 :(得分:1)

这就是我解决它的方法。

使用允许的请求的限制,突发和最大限制创建使用计划

http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/APIGateway.html#createUsagePlan-property

API密钥:

创建API密钥(createApiKey),并将(createUsagePlanKey)与已定义的使用计划相关联。这将允许为收到的请求定义限制。

http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/APIGateway.html#createApiKey-property

http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/APIGateway.html#createUsagePlanKey-property

有一个单独的lambda来监控Generated API-Keys并在它过期后进行清理,因此你不会使用未使用的密钥泛滥API-Gateway。

如果您将其带到CloudFront,您可以创建自签名URL,该URL在给定的时间段内有效。在该时间限制URL之后将无效。这是为了让用户有时间限制,因此在给定的时间限制内,他们可以访问哪些资源。

我们继续使用另一个用例,您只能使用自定义授权程序在某些网址上对用户进行身份验证。任何其他调用的网址都会在没有任何其他代码的情况下返回。

希望它有所帮助。