如何将标头添加到API网关请求

问题描述:

我想为未经身份验证的请求添加默认的已调节API密钥以防止滥用。如何将标头添加到API网关请求

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

编辑

这样可以很清楚我需要什么,我怎么变换API网关的请求?这可能吗?

+0

我不认为有可能在* API密钥验证/限制步骤之前转换请求*。 –

+0

谢谢@ Michael-sqlbot我还没有找到方法,不要认为这可能是 – Jonathan

+0

这是一个API,它支持对相同资源进行身份验证和未经身份验证的访问?我假设你看到你可以单独调节任何一种资源+方法。没有关于你的意图的更多信息,很难建议可能有兴趣的替代方案或变通办法。 –

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

如果你想要一个默认的API密钥,那么你可以去自定义的API网关授权者。请查看相同的官方文档here

+0

cognito提供什么?它可以在注册时为用户生成API密钥吗?处理结算?感谢您的回答,关注自定义授权人 – Jonathan

+0

Amazon Cognito是一项服务,您可以使用这些服务为您的用户创建唯一身份,使用身份提供商验证这些身份,并将移动用户数据保存到AWS云中。所以每个用户都会有自己的身份证明。我编辑了Cognito文档的问题 –

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

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

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

注意:不要使用API​​密钥进行身份验证,这是不推荐的。

+0

API通过API网关公开,而不是通过网络服务器或托管网页 – Jonathan

+0

您如何使用API​​?从Web客户端还是从Web服务器? – Ashan

+0

这取决于客户决定访问它,但我并没有单独提供它,而是自己使用API​​ – Jonathan

这就是我将如何解决它。

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

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上验证用户。任何其他获取调用的网址都将在没有任何附加代码的情况下返回未授权。

希望它有帮助。

+0

这是一个很好的答案,因为它解决了OP的特定需求。 – dashmug