【问题标题】:Why is refresh token is more secure & why do we use refresh token if it can also be stolen?为什么刷新令牌更安全?如果刷新令牌也可能被盗,为什么我们还要使用它?
【发布时间】:2021-12-26 06:13:49
【问题描述】:

假设我的用户登录并且我给了他 2 个令牌;访问和刷新令牌

访问令牌有效期为 15 分钟,刷新令牌有效期为 1 周

我们不想只给他们长期有效的访问令牌,因为有人可以获得该访问令牌并使用它发出请求,这就是我们将其设置为 15 分钟有效的原因。

但是,我们的刷新令牌也不能被盗吗?有人可以获得我们的刷新令牌并获得 1 周的访问权限吗?那么害羞的是,如果它们都受到危险,我们会给出两个不同的令牌并实施基于访问刷新的令牌身份验证吗?

【问题讨论】:

  • 刷新令牌可以被撤销,这是主要区别。您基本上强制用户每小时向服务器请求新的访问令牌,现在服务器可以决定是否接受刷新令牌。

标签: jwt authorization token


【解决方案1】:

您说得对 :) 这取决于您使用的应用程序的属性。例如,如果您有一个公共客户端(例如,在浏览器中运行的 SPA),并且您授予该客户端对访问令牌和刷新令牌的访问权限,那么您确实失去了刷新令牌通常会为您提供的附加安全性。如果公共客户端可以刷新令牌,那么窃取您的刷新令牌的任何人都可以使用它来创建新的访问令牌。这就是为什么 SPA 通常不会直接获得刷新令牌 - 这些令牌要么保存在仅 http 的 cookie 中,要么 SPA 将使用 SSO 会话来刷新访问令牌(然后不使用刷新令牌)。

在机密客户端中,我们可以更安全地使用刷新令牌,因为它们不容易被盗,即使被盗,攻击者也可以访问客户端的密钥以在刷新端点进行身份验证。

@luk2302 在他的评论中所说的也取决于实施。您可以拥有可以撤销访问令牌和刷新令牌的服务器,以及不能撤销刷新令牌的服务器(这不是 OAuth RFC 的要求)。

【讨论】:

  • 如果存储在 cookie 中,SSO sessionId 不是等同于访问令牌吗?如果用于检索另一个 accessToken,SSO sessionId 不是等同于访问令牌吗?
  • 您可以控制后端的会话。一旦将访问令牌颁发给客户,您就无法控制它们。例如。您可以在用户注销时终止 SSO 会话,但如果您使用 JWT,您将无法撤销访问令牌(除非您有将令牌列入黑名单的机制,但这是另一回事)。此外,SSO 会话和访问令牌的颁发者可能不是同一方。例如。您正在使用 Google 的 SSO 对用户进行身份验证并为他们颁发访问令牌。然后,您可以依靠 Google 的会话管理来刷新令牌。
猜你喜欢
  • 1970-01-01
  • 2017-01-18
  • 1970-01-01
  • 2020-12-03
  • 2021-12-02
  • 2016-09-24
  • 2018-02-18
  • 2020-06-12
相关资源
最近更新 更多