具有长 TTL 的引用令牌和刷新令牌+短寿命 JWT 有啥区别?

Posted

技术标签:

【中文标题】具有长 TTL 的引用令牌和刷新令牌+短寿命 JWT 有啥区别?【英文标题】:What's the difference between reference_token with long TTL and refresh_token+short lived JWT?具有长 TTL 的引用令牌和刷新令牌+短寿命 JWT 有什么区别? 【发布时间】:2018-07-29 12:00:21 【问题描述】:

我们一直在我们的 SPA 中使用 refresh_tokens + JWT,并将 Identityserver3 作为 TokenServer (STS)。我注意到不建议这样做,我们应该改用reference_token,因为在令牌被泄露的情况下具有可撤销性。

用户要求保持登录状态 30 天。

参考标记(方法 1) 在这种情况下,STS 发出一个具有长 TTL(30 天)的 reference_token。 还建议资源所有者将 reference_token 缓存一小段时间(10 分钟 TTL)以提高性能。

如果 reference_token 被泄露,它可以在 STS 中被撤销,Resources 将在 10 分钟内拒绝请求(取决于缓存)。

这是有道理的。

刷新令牌 + 短期 JWT(方法 2) 在方法 2 中,STS 发出一个短期 JWT(10 分钟 TTL)和一个较长的 refresh_token(30 天)。资源检查 JWT 的有效性(最多只能有效 10 分钟)。

如果 refresh_token 被泄露,它可以在 STS 中被撤销,客户端将无法生成新的 JWT。资源将在 10 分钟内拒绝请求(取决于 JWT 创建时间)。

从安全的角度来看,我看不出方法 1 和方法 2 之间的区别。

有人可以进一步解释这一点并帮助我推理要走的路吗?

【问题讨论】:

【参考方案1】:

第二种方法有一个额外的攻击向量,即可以从刷新令牌中获得的访问令牌。

我认为在这种情况下您没有理由不使用引用标记。这就是他们的目的。

【讨论】:

以上是关于具有长 TTL 的引用令牌和刷新令牌+短寿命 JWT 有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

自动进行Facebook页面访问令牌生成

延长访问令牌寿命的身份机制

无法刷新访问令牌。请重新认证

我不明白 JWT 刷新令牌的行为 (LARAVEL)

访问和刷新令牌的生命周期

JWT - 第二次刷新后的 TOKEN_EXPIRED