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