我的查询是关于使用JWT令牌同时支持同一用户的多设备登录。我使用NestJS作为我的后端。
用户表: userid、用户名、密码(包含散列密码)、名称、refreshToken(包含散列刷新令牌)
当用户执行/api/登录调用时,在具有有效用户名和密码的情况下,访问令牌和刷新令牌将使用jwt护照库生成。刷新令牌被散列化并存储在该特定用户的user表的refresh列中,访问令牌和刷新令牌通过响应发送到客户端。
在/api/刷新调用期间,用户发送的刷新令牌将使用用户表中存在的散列刷新令牌进行验证,然后生成一个新的访问令牌和一个新的刷新令牌。新的刷新令牌将在同一用户行的user表refreshToken列中进行散列和更新。
对于使用单个设备登录的用户来说,此流非常有效。当同一用户同时使用多个设备登录时,在同一用户行的user表的refreshToken列中更新刷新令牌,这使我们失去了针对同一用户的现有/有效的刷新令牌。
流动:
创建的刷新令牌。
我想知道为同时使用多个设备登录的用户管理JWT刷新流的最佳工业实践是什么?
发布于 2022-06-08 07:39:12
最简单的方法是将刷新令牌保存在一个单独的表中。通常,刷新令牌与用户的帐户数据分开保存,因为用户可以在任何给定时间激活更多的刷新令牌。无论何时使用刷新令牌,您都可以找到具体的令牌,并在其中创建一个新的令牌。
顺便说一句,没有必要对数据库中保存的刷新令牌进行散列。它们对你的系统是独一无二的,它们不是密码。
https://stackoverflow.com/questions/72511998
复制相似问题