我们应该在每次登录后删除或使 jwt 无效吗?

Posted

技术标签:

【中文标题】我们应该在每次登录后删除或使 jwt 无效吗?【英文标题】:Should we delete or invalidate jwt after every login? 【发布时间】:2019-05-21 05:48:07 【问题描述】:

我正在尝试实现注册和登录功能,并且正在使用 Spring Boot 和 java 堆栈。我正在关注本教程(您不必单击它,只是放在这里以供参考和完成此问题)。

Spring Security mysql JWT Tutorial - Grokonez

现在我有一个用于注册和登录的端点。注册并将用户添加到数据库后,我正在登录。对于登录端点,我得到了一个 jwt 令牌。使用这个令牌,我可以访问受限资源。直到现在一切都很棒。现在,当我再次点击登录端点时,我得到了另一个令牌。

这就是我的困境所在。由于我有两个令牌,我基本上可以使用两个令牌登录。当然,现在这两个令牌都有一个到期日期(例如一天)。但就良好实践而言,我们是否应该使旧令牌失效,这意味着在任何给定时间点,任何用户都只能使用一个令牌来登录我们的系统?

如果是这样,这是否意味着用户不能同时在笔记本电脑和手机等设备上使用我们的应用?那么在这种情况下,active 令牌的上限是多少?

我听说过一些有关刷新令牌等的信息,但我只想保持简单,我可以只使用一个称为访问令牌的令牌。

所以,如果您认为我应该使 jwt 无效并在任何给定时间点为每个用户只保留一个活动 jwt,我该怎么做?将 jwts 存储在 db 中并做点什么?

【问题讨论】:

【参考方案1】:

如果您要将 JWT 令牌存储在数据库中,那么,使用 JWT 令牌毫无意义。因为,拥有一个独立的、单独的令牌的主要原因是为了避免在用户访问应用程序时进行数据库验证。

我可以建议以下方法来避免创建多个活动令牌。

您可以将 JWT 令牌创建时间(上次)保存在数据库中,然后,您可以在用户登录应用程序时交叉检查上次创建时间(与当前时间比较)。

【讨论】:

以上是关于我们应该在每次登录后删除或使 jwt 无效吗?的主要内容,如果未能解决你的问题,请参考以下文章

刷新后如何使以前的 JWT 令牌无效

每次使用 JWT 登录时允许一个并发用户

Django rest framework JWT ,删除 jwt 令牌

如何在某人更改密码后使用户的 JWT 令牌无效

微服务统一登陆认证怎么做?JWT ?

JSON Web 令牌 - 如何识别用户?