oAuth服务器是否应该为同一客户端请求提供相同的accessToken?

Vin*_*res 13 oauth oauth-2.0

我正在开发一个oAuth2服务器,我偶然发现了这个问题.

让我们假设我的令牌设置为在一小时内到期的情况.在这个时间范围内,一些客户端使用相同client_id和相同的方式经历隐式auth五十次redirect_uri.一切都基本相同.

我是否应该accessToken在第一次请求中为其生成相同的内容,直到它过期或者我应该accessToken在每个请求上发出新内容?

发送相同令牌的好处是我不会在服务器上留下客户端的陈旧和未使用的令牌,从而最小化攻击者试图猜测有效令牌的窗口.

我知道我应该限制速度而且我正在这样做,但是对于来自数千台不同机器的大型僵尸网络攻击,某些限制不会立即生效.

但是,我不确定这个解决方案的缺点,这就是我来到这里的原因.这是有效的解决方案吗?

vap*_*p78 5

我宁愿说 - 不。

原因:

  1. 您永远不应该在授权服务器端以纯文本形式存储访问令牌。访问令牌是凭据,应以散列形式存储。可能不需要加盐,因为它们无论如何都是生成的字符串。请参阅OAuth RFC 点 10.3
  2. 取决于您处理后续请求的方式 - 知道某个资源所有者正在使用您的服务并重复请求使用的客户端 ID 的攻击者。这样,攻击者就可以冒充资源所有者。如果您真的返回相同的令牌,那么至少确保您每次都对资源所有者进行身份验证。
  3. “状态”参数呢?如果 state 参数不同,你会认为请求是“相同的”吗?如果没有,那么僵尸网络攻击只会每次都使用不同的状态并迫使您发行新的令牌。

另外 - 通常通过应用程序逻辑防御僵尸网络攻击是非常困难的。将您的 AS 暴露给 Internet 的服务器应该注意这一点。在应用层,您应该注意它不会因小带宽攻击而下降。