首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果一个用户尝试登录不同的浏览器,我们有没有办法避免为他/她生成多个令牌?

如果一个用户尝试登录不同的浏览器,我们有没有办法避免为他/她生成多个令牌?
EN

Stack Overflow用户
提问于 2018-12-26 16:25:42
回答 1查看 574关注 0票数 0

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

EN

回答 1

Stack Overflow用户

发布于 2018-12-26 16:47:58

简而言之,NO,你不能仅仅避免生成令牌,除非你在django-rest-framework-jwt模块中做了一点改动。但这不再是纯粹的jwt了。

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

所以

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

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

请记住,您不能删除

标记。因为它没有存储在数据库中。所以,如果你的令牌被欺骗了,那就完了。您无法对其执行任何操作,除非令牌的生命周期结束且令牌过期。

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

  • 考虑更改为另一个基于令牌的身份验证,该身份验证将令牌存储在数据库中,以便您可以跟踪它。
  • 将jwt系统更改为适合您的系统(我以前就这样做过)。例如,在数据库中添加一个查找id,并通过绑定到每个用户的令牌来检查令牌。我知道它不再是jwt了,但您仍然可以使用它的一些好处。例如,不要在无效的jwt令牌上访问数据库,并在其中存储一些有效负载,如果验证过,则不要访问数据库以获取该信息。如权限和...
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53929397

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档