Django 如果一个用户尝试登录不同的浏览器,是否有一种方法可以避免为他/她生成多个令牌?

Django 如果一个用户尝试登录不同的浏览器,是否有一种方法可以避免为他/她生成多个令牌?,django,django-rest-framework,django-rest-framework-jwt,Django,Django Rest Framework,Django Rest Framework Jwt,我在后端使用django rest framework jwt,并从Angular项目调用API。 当用户尝试在多个浏览器上登录时,每次都会在新浏览器上为用户生成一个新令牌。每一个标记都是有效的。 我想要的是,当用户已经登录到一个浏览器,并且他/她尝试登录到第二个不同的浏览器时,第一个浏览器的前一个令牌应该无效。简单地说,否,除非在django rest framework jwt模块中做了一些调整,否则您不能避免生成令牌。但这不再是纯粹的jwt了 JWT代表JSON Web令牌,它是一种在计算

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

简单地说,,除非在django rest framework jwt模块中做了一些调整,否则您不能避免生成令牌。但这不再是纯粹的jwt了

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

所以

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

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

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

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

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

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


好的,我不确定你是否能做到这一点。原因是令牌不与用户绑定。另外,由于您使用的是JWT,这意味着您的服务是无状态的。你没有在任何地方维护会话。因此,您不能使访问令牌无效。在这里,您可以最大限度地适当缩短
jwt
令牌的生命周期,以确保更好的安全性。