为了学习,我在Angular中开发了一个以AWS为后端的前端应用程序。
由于这是一个说教式的项目,我必须防止任何可能的成本爆炸。总体而言,关于API网关调用。
目前,我有一个公共GET端点,用于向前端的公共主页提供信息。
我需要将使用计划附加到此端点,以限制对此端点的最大调用次数。例如,每周最多打10000个电话。
我已经尝试了API-KEY:
- 使用";配额:每周10000个请求
- 创建了连接到使用计划的API密钥
- 将API KEY连接到端点的身份验证方法
它有效,但通过这种方式,我需要在前端对API KEY进行硬编码。
我知道在前端对敏感信息进行硬编码是一种糟糕的做法,但我认为在这种情况下,API KEY仅用于连接使用计划,而不用于保护私人信息或操作。所以我不确定在这种情况下它是否应该被接受。
此解决方案是否安全,或者同一API密钥是否可以用于其他恶意目的?
还有其他解决方案吗?
要添加到另一个答案中,API密钥不是授权令牌。
与使用计划相关联的API密钥在x-api-key
报头上发送到网关(默认情况下(。
授权者使用的令牌位于标准Authorization
标头上。
使用API密钥为特定调用方设置自定义节流和配额,但在任何安全端点上仍需要授权程序。
当使用自定义授权器应用于使用计划时,您可以选择设置要从授权器返回的API密钥,这可以防止您必须向客户端分发密钥以及客户端的机密。
APIG关键来源文档
正如文档所说,一般情况下,您不希望依赖于硬编码的API密钥进行身份验证。
此外,根据您提供的信息,使用计划限制与API密钥的用户使用相关联。因此,您也可以对帐户或阶段本身设置节流。
最后,如果可能的话,你可以在你的服务器上设置安全组规则,或者在为你的前端服务的vpc上设置访问控制列表,这样就不是每个人都可以访问它
其他想法是在不使用API网关时关闭它,并经常旋转API密钥。
显然,如果这是托管敏感信息或做任何非常重要的事情,这些都不够。但只要客户端中唯一的信息是访问API网关的API密钥,并且API网关本身不会与任何敏感的东西交互,这可能足以用于学习项目。
但你应该自担风险,因为据你所知,我就是那个试图黑你的人;(