代码之家  ›  专栏  ›  技术社区  ›  darkhorse

为什么在使用基于JWT的身份验证时需要刷新令牌?[副本]

  •  0
  • darkhorse  · 技术社区  · 6 年前

    当我通过YouTube认证时,它给了我一个刷新令牌。然后我使用这个刷新令牌大约每小时获取一个新的访问令牌。如果我有刷新令牌,我可以随时使用它来获取新的访问令牌,因为它永远不会过期。因此,我不认为这比从一开始就给我一个访问令牌,而不必担心整个刷新令牌系统更安全。

    0 回复  |  直到 5 年前
        1
  •  106
  •   Community CDub    8 年前

    基本上,刷新令牌用于获取新的访问令牌。

    The OAuth 2.0 Authorization Framework :

    • 访问令牌 在资源所有者的批准下,由授权服务器向第三方客户端发布。客户端使用访问令牌访问由资源服务器托管的受保护资源。
    • 刷新令牌 用于获取访问令牌的凭据。刷新令牌由授权服务器颁发给客户端,用于在当前访问令牌无效或过期时获取新的访问令牌,或获取具有相同或更窄范围的其他访问令牌。

    现在,回答你的问题,为什么你仍然被颁发一个刷新令牌,而不是仅仅确保一个访问令牌,主要原因是由互联网工程工作队提供的 Refresh tokens

    有一个安全原因 refresh_token 仅与授权服务器交换,而 access_token

    有关OAuth 2.0流的更详细和完整的信息,请尝试阅读以下参考资料:

        2
  •  15
  •   Community CDub    4 年前

    刷新令牌至少有两个用途。首先,刷新令牌是OAuth2客户机拥有的一种“证明” 从用户接收到访问其数据的权限,因此可以再次请求新的访问令牌,而无需用户遍历整个OAuth2流。第二,与长寿命访问令牌相比,它有助于提高整个安全流。我将更详细地讨论这两点。

    再一次 当它的YouTube令牌过期时?如果YouTube令牌的过期时间非常短,比如5分钟,会发生什么。如果客户端应用程序至少每5分钟提示一次您的权限,那就有点烦人了!OAuth2针对这个“问题”提出的解决方案是刷新令牌。通过使用刷新令牌,访问令牌可以保持短命(这在访问令牌以某种方式泄漏或被盗的情况下是可取的),并且刷新令牌可以保持长(er)寿命,允许客户端在一个访问令牌到期时获得新的访问令牌,而不需要用户的许可(再次)。

    但为什么是刷新令牌?如果问题的关键是不要用权限请求来欺骗用户,那么为什么客户端不能简单地说“嘿,授权服务器,我想要另一个访问令牌呢。现在?或者,“嘿,授权服务器,这是我的过期令牌,给我一个新的!”。嗯,刷新令牌作为一种“证据”,证明客户机在某个原始时间点被用户授予了访问权限。这个“证明”是由授权服务器数字签名的刷新令牌的形式。通过客户端呈现刷新令牌,授权服务器可以验证客户端是否在过去的某个时间点收到了来自用户的权限,并且客户端不必再次提示用户。

    然而,这就提出了一个问题,“如果刷新令牌被泄露或窃取,或者仅仅被恶意客户端应用程序保存,而该应用程序没有根据用户的请求将其删除,那么会发生什么呢?攻击者不能继续使用刷新令牌无限期地(或直到它过期)获取有效的访问令牌吗?这个问题导致讨论我提到的第二个目的,刷新令牌有助于更安全的流。

    访问令牌出现的问题是,一旦获得,它们只会呈现给资源服务器(例如YouTube)。因此,如果一个访问令牌被窃取或泄露,您如何告诉资源服务器不要信任该令牌?嗯,你真的不能。唯一的方法是更改授权服务器上的私有签名密钥(首先对令牌进行签名的密钥)。我认为这样做很不方便,而且在某些情况下(比如Auth0)不受支持。

    另一方面,刷新令牌需要频繁地呈现给授权服务器,因此,如果其中一个令牌被破坏,那么从整体上撤销或拒绝刷新令牌是很简单的,并且不必更改任何签名密钥。

        3
  •  10
  •   xmedeko    6 年前

    @Teyam在文章中提到为什么OAuthV2同时具有访问和刷新令牌?但我更喜欢另一个答案: https://stackoverflow.com/a/12885823/254109

    太长,读不下去了 refresh_token access_token 可能只是存储在一些快速的临时存储器中(如内存)。它还允许授权和资源服务器分离。

        4
  •  10
  •   Adam Cole    5 年前

    “因此,我不认为这比从一开始就给我一个访问令牌,而不用担心整个刷新令牌系统更安全。” 我为同一个问题苦苦挣扎。简而言之,刷新令牌是确保凭据未过期所必需的。