我想为未经身份验证的请求添加一个默认的节流API密钥,以防止滥用。
我将如何在API网关中做到这一点?
编辑
为了更清楚地说明我需要什么,我如何在API网关中转换请求?这个是可能的吗?
发布于 2017-09-25 10:43:46
我认为使用科尼托是授权API网关的最佳方式。
如果您想要一个默认的API密钥,那么可以使用自定义API网关授权程序。请查看同一这里的正式文档
发布于 2017-09-25 12:08:55
您需要将API密钥存储在应用程序的服务器端,不应该将其公开给客户端(虽然API密钥不被视为安全令牌,但恶意方可以使用它来调用您的API)。
根据应用程序使用API的性质,有几个选项可供选择。
注意:不建议使用API密钥进行身份验证。
发布于 2017-09-26 06:07:56
这就是我解决它的方法。
创建使用计划,并在允许的请求上设置节流、突发和最大限值。
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来监视生成的API并在它过期后进行清理,这样您就不会用未使用的键淹没API。
如果你把它带到CloudFront,你可以创建自签名的网址,这将是有效的一段时间。在该时限之后,URL将无效。这是为了保持自己的时间限制的用户,所以在给定的时间限制,他们可以访问什么资源。
我们还使用了另一个usecase,您只能使用自定义Authorizer在某些urls上对用户进行身份验证。被调用的任何其他urls都将返回未经授权而不需要任何其他代码。
希望能帮上忙。
https://stackoverflow.com/questions/46403198
复制相似问题