【发布时间】:2019-11-05 05:43:39
【问题描述】:
我很难理解 JWT 刷新令牌如何比仅使用具有较长生命周期的普通 JWT 访问令牌更安全。我知道,通过缩短 JWT 访问令牌的生命周期,可以限制攻击者滥用它的机会之窗。这假设攻击者以某种方式绕过了 HTTPS 的 SSL 层,以便首先获得 JWT 访问令牌。
JWT 刷新令牌究竟是如何解决这个问题的? 一旦访问令牌过期,你将不得不传输刷新令牌,如果我们假设 HTTPS 不够安全,也可能被劫持。如果攻击者获得了刷新令牌的控制权,那么他现在可以访问大量的访问令牌,因为刷新令牌通常具有较长的生命周期。 通过扩展,我们也可以说,如果 HTTPS 协议被破坏,初始用户名/密码身份验证可能会被窃取。
由于刷新令牌必须保存在前端(我正在构建一个 Angular/Spring 启动应用程序),我们必须特别注意刷新令牌也不能被客户端窃取。 LocalStorage 显然不适合存储刷新令牌,因为它不是安全存储。它们也不适合发送每个请求,因为否则它们将与访问令牌一起被盗,这首先违背了拥有短寿命访问令牌的目的。 应该在哪里存储刷新令牌?
如果我希望在登录页面提供 remember-me 功能,我可以简单地将刷新令牌设置为无限寿命吗?
我已经通过以下链接(以及更多)阅读了几个写得很好的答案:
What if JWT is stolen? SPA best practices for authentication and session management https://security.stackexchange.com/questions/119371/is-refreshing-an-expired-jwt-token-a-good-strategy
但我对这三个问题并不满意。
【问题讨论】: