首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用JWT令牌管理多设备同时登录?

如何使用JWT令牌管理多设备同时登录?
EN

Stack Overflow用户
提问于 2022-06-06 00:31:31
回答 1查看 1.1K关注 0票数 2

我的查询是关于使用JWT令牌同时支持同一用户的多设备登录。我使用NestJS作为我的后端。

用户表: userid、用户名、密码(包含散列密码)、名称、refreshToken(包含散列刷新令牌)

当用户执行/api/登录调用时,在具有有效用户名和密码的情况下,访问令牌和刷新令牌将使用jwt护照库生成。刷新令牌被散列化并存储在该特定用户的user表的refresh列中,访问令牌和刷新令牌通过响应发送到客户端。

在/api/刷新调用期间,用户发送的刷新令牌将使用用户表中存在的散列刷新令牌进行验证,然后生成一个新的访问令牌和一个新的刷新令牌。新的刷新令牌将在同一用户行的user表refreshToken列中进行散列和更新。

对于使用单个设备登录的用户来说,此流非常有效。当同一用户同时使用多个设备登录时,在同一用户行的user表的refreshToken列中更新刷新令牌,这使我们失去了针对同一用户的现有/有效的刷新令牌。

流动:

  1. 用户1登录到使用设备1->用户1的refreshToken列被更新为一个新的刷新令牌
  2. 用户1登录使用设备2->用户1的refreshToken列被一个新的刷新令牌覆盖,并且我们丢失了为设备1

创建的刷新令牌。

我想知道为同时使用多个设备登录的用户管理JWT刷新流的最佳工业实践是什么?

EN

Stack Overflow用户

回答已采纳

发布于 2022-06-08 07:39:12

最简单的方法是将刷新令牌保存在一个单独的表中。通常,刷新令牌与用户的帐户数据分开保存,因为用户可以在任何给定时间激活更多的刷新令牌。无论何时使用刷新令牌,您都可以找到具体的令牌,并在其中创建一个新的令牌。

顺便说一句,没有必要对数据库中保存的刷新令牌进行散列。它们对你的系统是独一无二的,它们不是密码。

票数 5
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72511998

复制
相关文章

相似问题

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