哪种JWT刷新策略更安全?

时间:2017-08-01 03:51:24

标签: security token jwt

基本思想是用户会话应该很长并且可以根据用户活动继续/禁用。但是,因为我们无法撤销令牌所以令牌应该是短期的,例如15分钟。如果我们可以在令牌过期后刷新令牌,则可以继续用户会话。

经过一番研究,我发现有两种实现方式可以用于此目的:

1。带有两个TTL的JWT令牌。

一个用于刷新到期,一个用于令牌到期。刷新TTL比令牌到期TTL长。如果客户端发现当前令牌已过期但仍可刷新,则客户端将调用服务器刷新API。新令牌将具有新的到期时间和刷新到期时间。如果两个TTL都已过期,则该令牌无效,并且用户需要再次进行身份验证。 赞成 *不需要额外的auth服务器。 *可以修改令牌的数据,以便在特定情况下替换会话。 缺点 *无法撤消刷新令牌。

2。两个令牌,一个刷新令牌由auth服务器保存,一个访问令牌用于访问应用程序。

刷新令牌是长寿命的,例如一周。访问令牌(这里可以使用JWT)是短暂的,例如15分钟。客户端每次发现访问令牌过期(可以从访问令牌的有效负载中读取)时,都会持有这两个令牌,它会通过刷新令牌进入auth服务器,要求获取新的访问令牌。

赞成

  • 刷新令牌可以撤销,因为它存储在auth服务器中。

缺点

  • 需要额外的auth服务器。

问题

假设在选项1中,令牌到期时间为15分钟,令牌到期和刷新到期之间的时间间隔也为15分钟。在选项2中,访问令牌到期时间为15分钟,刷新令牌到期时间为一周。

普通用户

继续使用应用程序
  • 这两个选项都可以很好地刷新令牌,用户体验是相同的。
登出
  • 选项1:令牌仍然有效。最多30分钟后,令牌变为无效。
  • 选项2:立即撤销刷新令牌。访问令牌最多可使用15分钟。
关闭浏览器而不注销。
  • 选项1:令牌在最多30分钟后失效。
  • 选项2:刷新令牌最多有效一周。当然,它可以记录何时将刷新令牌用作最后一个活动以缩短此时间窗口。

恶意用户(尝试窃取每个令牌)

登出
  • 选项1:尝试访问刷新API,以便令牌保持刷新和可用。
  • 选项2:刷新令牌被取消。访问令牌最多可使用15分钟。
关闭浏览器而不注销。
  • 选项1:尝试访问刷新API,以便令牌保持刷新和可用。
  • 选项2:尝试使用刷新令牌访问auth服务器,以便继续生成访问令牌。

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

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

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

1 个答案:

答案 0 :(得分:1)

拥有刷新令牌的唯一目的是允许更新用户会话,而无需让用户再次输入密码。

让我们拆分一些用例

高度敏感的应用中的短暂会话

考虑在银行网站,支付网站或公共云中进行会话(AWS管理员令牌可以删除下面的所有公司)。

  • 极度敏感的信息。
  • 故意将会话限制在很短的时间(5分钟到1个小时)内。
  • 用户必须在到期后使用密码(和2FA)再次登录。不支持续订。
  • 对于业务应用程序(例如AWS),会话可能会更长(12h =工作日),以避免员工在一天内不断进行身份验证。
  • 个人提示:不要为无效(或缺乏无效)而烦恼,令牌会在您意识到它们被盗/泄漏并对其采取任何措施之前很久就过期了。如果强制用户每15分钟重新登录,shoulder surfing是否存在更大的问题。

对于此用例,必须在没有用户再次验证的情况下扩展会话,因此刷新令牌没有意义。提供短暂的访问令牌,根本不提供刷新令牌(可以在OIDC提供程序中将其禁用)。

用于移动应用程序的会话寿命非常长

考虑在移动应用程序中进行会话,可以是游戏,也可以是应用程序(facebook)。

  • 没有敏感信息(可能会认为他们的facebook敏感,但这与gmail或银行完全不同)
  • 会话可能会持续一段时间。 (您是否曾经必须在facebook或tinder上再次进行身份验证?)
  • 在手机上(重新)输入密码是一个巨大的PITA。 (一定比例的用户在需要时不会再回来。他们通常不记得或不想麻烦)。
  • 手机相对安全。即使被盗,小偷通常也无法解锁屏幕或访问设备/应用程序的存储空间。

在此用例中,会话可以生存很长时间会很好,但是重要的是能够取消会话(设备丢失或被盗)。一天交付访问令牌,并交付3个月刷新令牌。

打开应用程序后,可以请求带有刷新令牌的新会话,然后使用它。可以通过使刷新令牌无效来撤消设备访问权限(例如,参见facebook / gmail中的“我的活动设备”)。

只有很少的缺点是,如果几个月没有使用该应用程序,则用户必须再次进行身份验证,这在我看来是合理的。 (营销/增长部门的观点可能会有所不同,他们可能会要求将其延长-无限期?-。最好不要将其延长超过一年)。

我在这里专注于移动应用程序,但是网站在某种程度上可以相似。区别在于,尽管最终用户有大量的恶意软件/广告可能会把它们吸引出去,但笔记本电脑/台式机上的(浏览器)Cookie非常容易提取。因此,环境不太值得信赖,这是存储长期令牌的一个问题。

内联网中的透明SSO和续订会话

  • TODO:明天添加。到目前为止已经花了半个多小时来写信