首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OAuth REST中的速率限制:每个令牌还是每个消费者?

OAuth REST中的速率限制:每个令牌还是每个消费者?
EN

Software Engineering用户
提问于 2016-04-19 12:19:58
回答 1查看 951关注 0票数 2

我正在构建一个REST,并打算使用速率限制(使用漏桶算法)来防止爬行和枚举。API将由移动/平板应用程序(安装在许多设备上)和服务器对服务器客户端(一些内部,一些外部)使用。

允许用户在他们的手机上安装应用程序(实际上是将API公开的数据呈现出来),同时仍然限制反向工程师的爬行和枚举,我想出了这样的策略:

  • 在第一次运行时,应用程序生成一个足够大的随机ID,从而被认为是唯一的。
  • 当请求API访问令牌时,应用程序将使用该ID进行身份验证。
  • 对同一个应用程序ID的任何令牌请求都使用相同的令牌(只要它尚未过期)。
  • 对于同一个IP地址的任何令牌请求都会使用相同的令牌(只要它还没有过期)回答,完全忽略了应用程序ID。

此策略不适用于服务器对服务器的客户端,因为为了使用API,这些客户端必须与我的公司建立合同。

现在,关于限速:

这些策略中的一种更可取吗?如果:利与弊是什么?

  1. 确保任何消费实体一次获得多个有效令牌(基本上与应用程序相同)。把漏水的水桶挂在令牌上。
  2. 根据实体的请求,向其授予尽可能多的令牌。在授予实体的所有令牌之间共享漏桶。

另外:如果选择1更好:如何应用每个实体的1令牌策略?

  1. 只在以前的令牌过期后才授予新令牌。提供一个接口,允许实体撤消/使其当前令牌无效。
  2. 当请求一个新令牌时,撤消所有以前的令牌。

我特别担心的是

  • 同一承包商的多个服务器实例(因此,所有服务器都受相同的费率限制)
  • 运行共享IP地址的多个应用程序安装(公共WiFi,多个用户共享internet连接,.)
EN

回答 1

Software Engineering用户

发布于 2016-04-20 14:56:03

经过多次的反复讨论和与同事们的讨论,我决定选择方案2。原因如下:

这些策略在功能上是平等的。比赛条件是造成麻烦的原因。我们预计这些竞赛条件会发生:

  1. 同一实体的多个设备最初请求令牌在很短的时间内
  2. 同一实体的多个设备请求一个新的令牌在很短的时间内,因为以前的设备过期了

在第一种情况下,这两种战略具有同等的质量,而战略2在第二种情况下有几个优点:

设备可能希望在当前令牌到期之前请求一个新令牌,只为了安全地运行

  • 除非以前的令牌已经过期,否则不授予新令牌不允许这样做。
  • 使前一个仍然有效的令牌无效以获得一个新令牌很可能会导致问题:同一实体的其他设备将尝试使用刚刚失效的令牌,从而接收错误响应。
  • 如果客户端设备的时间设置与服务器时间稍有不同(15秒就足够了),客户机可以选择。
    • 接收已过期的令牌
    • 没有及时请求新令牌(因为该令牌在其实际过期时仍然有效)

  • 如果我们的服务器实例不完全同时运行,这个问题就会变得非常棘手。

每个设备注销/断开是不可能的

单个设备可能希望“注销”并确保它们的令牌不被混淆。使用策略1也是不可能的。

某些设备可能不需要授予其实体

的所有权限

如果设备不需要所有可能的潜在权限,那么最好不要获得比所需权限更多的令牌。使用策略1,这也是不可能的。

票数 1
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/316180

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档