【问题标题】:If an OAuth2 access token can be stolen, why isn't it safe to assume that a refresh token can be stolen too?如果 OAuth2 访问令牌可以被盗,为什么假设刷新令牌也可以被盗是不安全的?
【发布时间】:2021-05-23 16:15:30
【问题描述】:

如果我们提出一个问题“为什么不使用未过期的访问令牌,而不用刷新令牌?”,答案可能是“因为如果访问令牌被盗,恶意行为者有 X 时间 (所述未过期访问令牌的生命周期)以代表为其生成令牌的用户执行恶意行为。”因此,据我了解,解决问题的方法是,在成功的身份验证后,向用户发送 short living 访问令牌和 longer living 刷新令牌。我不明白这不仅仅是为了规避最初的问题。问题显然在于访问令牌被盗的理论上的可能性。因此,如果它曾经是,它的有效性很快就会过期,因此恶意行为者无法在很长一段时间内进行身份验证。在这种假设的情况下,如果谁能窃取访问令牌,为什么他们不能窃取刷新令牌呢?我得到的通常答案是:

  1. “您必须将刷新令牌存储在安全的地方。” 这对我来说毫无意义。为什么我不将访问令牌和刷新令牌都存储在“安全的地方”?
  2. “访问令牌被盗的可能性更高,因为它的使用频率高于刷新令牌”。在这种情况下,我怀疑“偷窃”的意思是“嗅探”,就像中间人攻击一样。关于这个,我有几个子问题。 1. 为什么适用? HTTPS 标头/正文不是加密的吗?如果在这个问题中假设 HTTP,我们为什么还要谈论防止漏洞?这很好地导致了:2. 在实践中,这种对请求的“嗅探”是什么样的?为什么恶意行为者不能“嗅探”每一个发送的请求,并最终找到刷新令牌?
  3. “在微服务环境中,访问令牌发送给所有服务,而刷新令牌只发送给授权服务/服务器。这听起来像是最有效的最重要的是,但我还有一个问题。这有什么区别?听起来授权服务器被认为比其他服务器具有更高的安全性?我想只有在采用统计方法时才有意义,因为要窃取访问令牌,需要利用任何 X 服务器,而要窃取刷新令牌,只需要利用一个服务器。虽然这只是我的假设,并且不知何故不符合这个安全概念的要点。此外,这个概念似乎不是为了解决服务器问题而创建的。

我想我的问题是:

“如果我们假设访问令牌的概念、使用它或它的存储方式等存在任何固有漏洞......是什么让刷新令牌不易受到这些漏洞的影响?”

【问题讨论】:

    标签: security authentication oauth-2.0


    【解决方案1】:

    虽然访问令牌和“静止”刷新令牌的安全属性确实相同,但区别在于“传输中”刷新令牌比访问令牌更容易保护,因为它的方式是使用,如下所述。

    首先,访问令牌只发送到资源服务器,刷新令牌只用于单个授权服务器。在许多情况下,资源服务器被认为不太受信任(授权服务器 - 按照设计 - 客户端的受信任组件),正如您所提到的,其中可能有很多可能具有适用于它们的不同级别的安全性。

    其次,流向授权服务器的刷新令牌可以使用刷新令牌的“滚动刷新”,这意味着在访问令牌刷新时,也会发出一个新的刷新令牌,这会使旧的刷新令牌无效.这是授权服务器的一种非常常见的实现模式。

    最后,也许有点长镜头,访问令牌用于比刷新令牌更多的请求,因此适用于传输层(定时攻击)的任何漏洞的机会都会成比例地增加。

    【讨论】:

      猜你喜欢
      • 2021-12-26
      • 2018-10-21
      • 2021-04-05
      • 2019-08-09
      • 2020-04-14
      • 2019-05-31
      • 2021-12-17
      • 2021-08-08
      • 1970-01-01
      相关资源
      最近更新 更多