系统时间更改后 JWT 刷新

Posted

技术标签:

【中文标题】系统时间更改后 JWT 刷新【英文标题】:JWT refresh after system time change 【发布时间】:2017-08-19 18:47:18 【问题描述】:

我正在开发一个 web 前端来配置一个硬件设备(几乎就像一个路由器),它运行一个 nodejs 后端来为配置的 Angular 前端提供服务。我使用 JWT 来保护后端的无状态请求。一个特点是通过前端设置系统时间,通过向后端发出命令,设置本地机器时间,来处理时区。问题是,当时间更改超过过去 30 分钟时,由于会话超时,用户会被注销。解决它的最佳方法是什么?我的方法是将超时设置为无限期,更改系统时间并将超时更改回 30 分钟,使用刷新令牌。还有其他想法吗?谢谢。

【问题讨论】:

【参考方案1】:

您可以实现刷新令牌。因此,只要访问令牌过期,用户就可以使用刷新令牌请求新的访问令牌。

【讨论】:

【参考方案2】:

如果您问我,当系统时间可以更改时,在 JWT 中使用过期时间是没有意义的。所以我的选择是:

- 根本不使用过期时间

- 使用刷新令牌

- 撤销所有已发行的令牌

- 时间历史:通过计算旧代币的发行日期来接受旧代币。您可以通过添加唯一且增量的jti 标识符来了解令牌的发布时间。当系统时间发生变化时,存储当前的jti值和旧时间与当前时间的差

 jti - time diff

超过最大过期时间可以清空列表

【讨论】:

谢谢,我现在实现了刷新令牌策略,似乎工作正常。

以上是关于系统时间更改后 JWT 刷新的主要内容,如果未能解决你的问题,请参考以下文章

Laravel JWT 身份验证

Angular 6在令牌更新后重制请求之前更改JWT令牌

过期后使用刷新令牌获取访问令牌(JWT)

是否可以使用我的服务器作为代理来获取 jwt 刷新令牌?

浏览器刷新后丢失 JWT 令牌

Django REST JWT 刷新