如何在前端使用时有效地限制查询API

时间:2016-07-29 13:24:24

标签: architecture api-design

我们假设我的网站上有一张地图,显示了不同位置的传感器。

我的网站为有限制的开发者提供API - 每天1000个请求是免费的,如果你想要更多,你必须支付0.0008美元/请求。验证是使用信用卡完成的。

但是,我使用的这张地图使用相同的API来查询数据。如何使API能够区分这两件事?我希望用户能够在我的网站上查看我的地图上的传感器数据,但我不希望其他开发人员在不使用适当的API的情况下窃取这些数据。

3 个答案:

答案 0 :(得分:2)

很高兴看到您意识到互联网上的每个API都是公共API ,因此可以在有足够时间发现其弱点的情况下被滥用。

我认为解决方案可能包含以下一些想法。可悲的是,以下每个想法都有一个缺点,但它们的组合可以充分满足您的要求。你可能永远无法绝对保证解决方案,但你可以非常接近。

想法:跟踪行为。是否容易识别"正常"调用API的地图的行为?例如,它每分钟只调用一次API,还是每秒调用多次?如果正常的地图引起的频率较低,那么您可以考虑更高的频率来自开发人员,而不是地图用户。

想法:跟踪用户。您的网站地图的用户是否需要登录?如果是这样,您可以跟踪每个用户的API调用,并查找对于正常地图使用而言过高的数字。

想法:跟踪每个地图显示。在浏览器窗口中的每个地图显示被分配唯一ID,其由网络服务器包括在网页的生成的HTML / JavaScript中。然后,该ID将与该显示的地图中的每个API请求一起发回。在API服务器中,如果ID不在当前显示的映射的列表中,则拒绝API请求。这个概念类似于" nonce",因此我将其称为 map-nonce 。直接调用API的开发人员没有有效的map-nonce,因此他们无法伪装成地图。并且,即使它们具有来自其他浏览器或用户的有效map-nonce,也不会对其特定会话有效。如果实现此操作,则必须跟踪活动的map-nonce。过了一会儿,map-nonce应该会过期。当用户注销时,该会话的map-nonce将过期。如果地图发出API请求,并且请求因map-nonce而被拒绝,则地图应重新显示,这将导致它从服务器获取新的map-nonce。

想法:混淆。将地图和API放在不同的域上。使地图的API与开发人员的API不同(可能是 JSON 查询字符串)。不要(公开)记录地图的API。仅在地图的API中包含地图的基本数据。每隔一段时间更改地图的API,以绊倒任何滥用开发人员。由于地图用户拥有可以过滤无意义视觉数据的大脑,因此您可以在地图API中包含虚假数据 - 如果认真完成,地图用户将不会介意。

因此,通过识别用户和地图显示,然后考虑其API行为,您应该能够合理地确定是否有人滥用您的API。当然,你可以打赌有人会找到一种方法来破解这个,所以你应该保留统计数据,并记得定期参与你的大脑和眼球。

答案 1 :(得分:1)

如果您使用的是像APIGEE这样的API,那么您可以选择应用基于源IP的策略。如果请求的源IP是您的服务器(网站),则不应用任何限制策略,否则应用限制策略。

答案 2 :(得分:1)

我意识到你已经接受了答案,但我想把其他一些东西放到混合中。

首先,如果您有免费和付费等级,那么您实际上并没有处理两种情况 - 您仍然在为开发人员提供服务,而您需要跟踪他们的使用情况。不同之处仅在于请求数量。如果您允许公开(匿名)访问,则只有两种情况,如果您允许公开访问,则无论您尝试添加多少棘手的跟踪技术,您都无法可靠地跟踪使用情况。

首先应确保所有API使用者(开发人员)都已注册,并且必须对您的API进行身份验证(查看OAuth 2.0,如果您有充分的理由,请远离它)。< / p>

由于多种原因,通过IP跟踪是不可靠的。首先它可以被欺骗,所以有人基本上可以在每个请求中注入任意IP地址,因此它看起来不会来自同一个地方。其次,任何防火墙背后的人(例如组织内部)都可能看起来像是在使用相同的IP地址 - 这可能与您的目标市场相关,也可能不相关,但我只是说

正如Virgo_The_Perfectionist所建议的那样,你最好的方法是使用可以为你做这件事的API网关。你应该寻找具有以下内容的东西:

  • 开发人员门户网站(最好支持开发人员自行注册和某种支付机制/货币化功能)
  • 能够根据使用情况设置决定层级和定价的计划
  • OAuth 2.0支持身份验证
  • 可以执行速率限制,限制等操作的SLA策略。

你当然可以自己推动自己的&#34; API网关,但您将重新发明轮子,它可能在经济上或努力方面都不值得:取决于您为整体服务的开发人员和API调用的数量。许多网关提供免费试用,因此您可以在没有经济损失的情况下开始使用,然后您可能需要每月50美元以上的较低计划,以及更多的开发人员和API调用。

您还可以通过商业API网关获得指标和报告,这样您就可以实际查看使用内容和方式的人员,如果您正在改进和改进产品,这对您来说非常宝贵

希望有所帮助。