如何将标头添加到API网关请求
我想为未经身份验证的请求添加默认的已调节API密钥以防止滥用。如何将标头添加到API网关请求
我该如何在API网关中执行此操作?
编辑
这样可以很清楚我需要什么,我怎么变换API网关的请求?这可能吗?
您需要将API密钥存储在应用程序的服务器端,并且不应将其暴露给客户端(尽管API密钥不被视为安全令牌,它可以被恶意方用来调用你的API)。
根据使用API的应用程序的性质,您有几个选项。
- 如果是前端地方在S3中托管的单个页面的Web应用程序,您可以使用AWS CloudFront的存储在标题中的API密钥,并将其转发到API网关,同时通过服务前端相同的CloudFront分配。这也将消除Web应用程序和API网关之间的跨源资源共享问题。
- 如果您有一个Web服务器,您可以将API密钥存储在Web服务器上,并用于在设置API密钥标头值时向API网关代理请求。
注意:不要使用API密钥进行身份验证,这是不推荐的。
这就是我将如何解决它。
创建使用计划与允许的请求的油门,突发和最大限制。
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,该URL将在给定的时间段内有效。此后,时间限制网址将无效。这是为了让用户有时间限制,因此在给定的时间范围内,他们可以访问哪些资源。
还有一个用例,我们研究过,您可以使用自定义授权者在某些URL上验证用户。任何其他获取调用的网址都将在没有任何附加代码的情况下返回未授权。
希望它有帮助。
这是一个很好的答案,因为它解决了OP的特定需求。 – dashmug
我不认为有可能在* API密钥验证/限制步骤之前转换请求*。 –
谢谢@ Michael-sqlbot我还没有找到方法,不要认为这可能是 – Jonathan
这是一个API,它支持对相同资源进行身份验证和未经身份验证的访问?我假设你看到你可以单独调节任何一种资源+方法。没有关于你的意图的更多信息,很难建议可能有兴趣的替代方案或变通办法。 –