哪种JWT刷新策略更安全?

11
基本思想是用户会话应该长时间存在,并根据用户活动继续/禁用。但由于我们无法撤销令牌,因此令牌应该是短期的,例如15分钟。如果令牌过期后可以刷新,则用户会话可以继续。
经过一些研究,我发现有两种实现方法:
1. 具有两个TTL的JWT令牌。
一个用于刷新到期,一个用于令牌到期。刷新TTL比令牌到期TTL更长。如果客户端发现当前令牌已过期但仍可刷新,则将调用服务器刷新API。新令牌将具有新的到期时间和刷新到期时间。如果两个TTL都过期,则该令牌无效,需要重新进行身份验证。
优点: *不需要额外的认证服务器。 *令牌数据可以被修改,因此可以在特定情况下替换会话。
缺点: *无法撤销刷新令牌。
2. 两个令牌,一个由认证服务器持有的刷新令牌,一个用于访问应用程序的访问令牌。
刷新令牌是长期的,例如一周。访问令牌(JWT可以在此处使用)是短期的,例如15分钟。客户端持有两个令牌,每次发现访问令牌过期(可以从访问令牌的有效载荷中读取),它都会使用刷新令牌向认证服务器请求新的访问令牌。
优点: *刷新令牌可以被撤销,因为它存储在认证服务器中。
缺点: *需要额外的认证服务器。
问题:
假设在选项1中,令牌到期时间为15分钟,令牌到期和刷新到期之间的时间间隔也为15分钟。在选项2中,访问令牌到期时间为15分钟,刷新令牌到期时间为一周。
普通用户:
两个选项都可以很好地刷新令牌,用户体验相同。
选项1:令牌仍然有效。最多30分钟后,令牌将变为无效。
选项2:立即撤销刷新令牌。访问令牌仍可使用,最多15分钟。
选项1:令牌最多在30分钟后失效。
选项2:刷新令牌最多在一周后仍然有效。当然,它可以记录刷新令牌用作最后活动时间,以缩短此时间窗口。
恶意用户(试图窃取每个令牌):
选项1:尝试访问刷新API,以使令牌保持刷新并可用。
选项2:刷新令牌被解除。访问令牌仍可使用,最多15分钟。
  • 选项一:尝试访问刷新API,以便令牌得以刷新并保持可用。
  • 选项二:使用刷新令牌尝试访问认证服务器,从而保持访问令牌的生成。

我的问题是,选项2比选项1更安全吗?

我们的产品目前仅使用分布式会话存储用户信息。我们希望消除认证服务器和会话的使用,但安全性是我们的首要任务。我没有看到选项2的很多优势。

我是否有什么误解或是错过了更好的令牌控制策略?任何建议将不胜感激。


请参见 https://security.stackexchange.com/questions/119371/is-refreshing-an-expired-jwt-token-a-good-strategy - tripleee
1个回答

4
拥有刷新令牌的唯一目的是允许用户会话得到更新,而无需再次输入密码。
让我们分几个用例来看:
高度敏感应用中的短期会话
考虑银行网站、支付网站或公共云(AWS管理员令牌可以删除整个公司基础架构)中的会话。
- 包含极其敏感的信息。 - 会话被故意限制在非常短的时间内(5分钟至1小时)。 - 用户必须在过期后重新使用密码(和2FA)登录。不支持续订。 - 对于业务应用程序(如AWS),会话可能会更长(12小时=工作日),以避免员工不断通过一天进行身份验证。 - 个人提示:不要太担心使令牌失效(或缺乏这种操作),令牌将在您意识到它们已被盗窃/泄露并采取任何措施之前就已过期。如果强制用户每15分钟重新登录,肩部冲浪才是一个更大的问题。
对于这种情况,必须要求在用户重新认证之前不能延长会话时间,因此刷新令牌没有意义。提供短期访问令牌,根本不提供刷新令牌(可以在OIDC提供程序中禁用)。
移动应用程序的极长寿命会话
考虑移动应用程序中的会话,可能是游戏,也可能是应用程序(Facebook)。
  • 没有敏感信息(有人可能认为他们的Facebook很敏感,但它与Gmail或银行账户无关)
  • 会话可能持续一段时间(您曾经在Facebook或Tinder上重新认证过吗?)
  • 在移动设备上重新输入密码非常麻烦(有些用户不想回来,因为他们经常记不住或不想麻烦)
  • 移动设备相对安全。即使被盗,窃贼通常也无法解锁屏幕或访问设备/应用程序的存储。
对于这种情况,希望会话可以非常长久,但重要的是能够取消它们(设备丢失或被盗)。提供一天的访问令牌和三个月的刷新令牌。
当应用程序被打开时,它可以使用刷新令牌请求一个新的会话,然后与之一起工作。撤销设备访问是可能的,方法是使刷新令牌失效(例如在Facebook/Gmail中查看“我的活动设备”)。
唯一的小缺点是如果应用程序长时间未使用,则用户必须重新进行身份验证,我认为这是合理的。(市场/增长部门的观点可能不同,他们可能会要求将其延长-无限制?最好不要超过一年)。
我在这里关注移动应用程序,但网站在某种程度上也可以类似。不同之处在于,在笔记本电脑/台式机上的(浏览器)cookie非常容易提取,尽管最终用户可能会有大量恶意软件/广告软件潜在地将它们吸走。因此,环境并不是非常值得信赖,这对于存储长期令牌是一个问题。
内部网络的透明SSO和更新会话

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接