狗粮我们自己的限速API
概述:
我的公司开发了一个速率有限的 API。我们的目标有两个方面:
- 答:围绕我们的产品创建一个强大的开发人员生态系统。
- B:通过使用 API 来驱动我们自己的应用程序,来演示 API 的强大功能。
澄清:为什么要限制速率?
我们限制了我们的API,因为我们将其作为我们产品的补充进行销售。匿名访问我们的API的每小时API调用阈值非常低,而我们的付费客户每小时最多允许1000次或更多次调用。
问题:
我们的限速API对开发者生态系统来说非常棒,但是为了让我们对它进行狗粮,我们不能允许它被限制在相同的速率限制范围内。我们API的前端都是JavaScript,直接调用API的Ajax。
所以问题是:
如何保护 API,以便在删除此类速率限制的过程中无法轻易欺骗时删除速率限制?
探索的解决方案(以及它们不起作用的原因)
根据主机标头验证引荐来源网址。- 有缺陷,因为引用很容易伪造。
使用 HMAC 根据请求和共享机密创建签名,然后在服务器上验证请求。- 有缺陷,因为通过查看前端JavaScript可以很容易地确定秘密和算法。
代理请求并在代理中对请求进行签名 - 仍然存在缺陷,因为代理本身公开了API。
问题:
我期待Stack Overflow上的聪明才智提出替代解决方案。您将如何解决这个问题?