0

我在后端使用 django-rest-framework-jwt 并从 Angular 项目调用 API。当用户尝试登录多个浏览器时,每次在新浏览器上为用户生成一个新令牌。每个令牌都是有效的。我想要的是,当用户已经在一个浏览器中登录并且他/她尝试在第二个不同的浏览器上登录时,第一个浏览器的先前令牌应该无效。

4

1 回答 1

1

简而言之,不,除非您在 django-rest-framework- jwt模块中稍作改动,否则您不能只避免生成令牌。但这不再是纯粹的 jwt 了。

JWT 代表 JSON Web Tokens,它是一种在计算机系统之间交换数据的机制,恰好可以方便地生成可用于在 Web 应用程序中实现无状态身份验证的授权标头。

所以

无状态意味着您不跟踪用户令牌,您只需验证它们。如果令牌有效且有效负载有效,则 OK。它不关心生成了多少令牌,也不关心它们是否与一个用户相关。令牌是基于时间戳创建的,并将与它的生命周期和时间戳进行比较来验证。

这意味着 django rest jwt 模块将根据系统的当前时间戳创建一个令牌,只要用户请求它。

请记住,您不能删除 jwt 令牌。因为它没有存储在数据库中。因此,如果您的令牌被欺骗,就是这样。你不能对它做任何事情,除非令牌的生命周期结束并且令牌过期。

如果您想跟踪这些令牌并能够控制它们,例如不要按照您的要求为用户创建冗余令牌:

  • 考虑更改为将令牌存储在数据库中的另一个基于令牌的身份验证,以便您可以跟踪它。

  • 将 jwt 系统更改为适合您的系统(我之前做过)。例如,在数据库中添加一个查找 id,并根据每个用户的边界检查令牌。我知道它不再是 jwt,但你仍然可以使用它的一些好东西。就像不要在无效的 jwt 令牌上点击数据库并在其中存储一些有效负载,如果经过验证,不要点击数据库获取该信息。像权限和...

于 2018-12-26T08:47:58.320 回答