为啥使用 JWT 刷新令牌
Posted
技术标签:
【中文标题】为啥使用 JWT 刷新令牌【英文标题】:Why use JWT refresh token为什么使用 JWT 刷新令牌 【发布时间】:2019-04-18 20:32:42 【问题描述】:我不确定我是否理解刷新令牌的概念。我知道他们在做什么 - 将它们存储在某个地方,并且每当访问令牌过期时,都可以获得一个新的访问令牌。
不泄露此刷新令牌显然非常重要,否则第三方可以使用它获取新的访问令牌。因此,它需要保持额外的安全。
我的问题是:为什么不让长期使用的访问令牌更加安全?安全性的区别在哪里?
下面是 auth0.com 对这一事实的描述,例如:
好处:泄露的访问令牌的访问窗口更短(这些令牌很快过期,减少了泄露令牌允许访问受保护资源的机会)"
这对我来说没有任何意义。所以访问令牌很快就会过期,因此如果它被泄露它是“不错的”。
另一方面,如果刷新令牌泄露,则非常糟糕。那么,为什么不尝试让访问令牌与刷新令牌一样安全,并获得完全相同的结果,但要管理的令牌更少呢?
【问题讨论】:
Why Does OAuth v2 Have Both Access and Refresh Tokens?的可能重复 JWT (JSON Web Token) automatic prolongation of expiration的可能重复 【参考方案1】:有时考虑问题的另一面会有所帮助,例如令牌发行者,而不是令牌所有者。
示例
假设某人的帐户已被管理员删除/阻止。
使用令牌系统,没有办法使所有当前令牌无效 - JWT 样式令牌的主要要点是拥有有效令牌可以避免集中检查(实际上,同样是会话 cookie 也是如此)。
单令牌系统的问题
因此,为了提高效率/方便,在单一令牌设置中,该令牌的生命周期有时会非常长,这意味着所有者(bearer)可以访问数小时或数天。亲爱的。
解决方案:刷新令牌
正如 Auth0 指南所说,刷新令牌系统允许在需要完成刷新之前缩短这种正常的生命周期(例如,缩短到几分钟或几秒)。在这个点,服务器/集中控制可以检查该帐户是否已被阻止或权限仍然有效,并相应地发出新的访问令牌。它仍然足够长以提供不一直调用身份验证流(当然不发送凭据)的性能提升
另一个用例
类似的用例是用户丢失了手机/设备,他们需要(有效地)撤销其拥有的令牌。 希望对您有所帮助。
【讨论】:
以上是关于为啥使用 JWT 刷新令牌的主要内容,如果未能解决你的问题,请参考以下文章