在jwt中,如何实现这样的功能:同一时间,只能有一个客户端登录,一个端登录后把其他端踢掉
来源:11-9 【应用】定制用户模型并添加初始化用户数据
南船座
2022-04-13
老师,您好,很仔细的看完了这一章
今天我去面试netcore高级开发,被问到了这个问题
就是实现这样的功能,在jwt中,如何实现这样的功能:同一时间,只能有一个客户端登录系统,一个端登录后,其他端会立即登录失效,并跳转到登录页
阿老师能和我讲讲大概操作原理,需要用到的技术,和对应的博客文章吗?
我记得阿老师讲过这段话——在jwt中,一旦token生成后,除非等到失效时间,否则基本不会被注销,万一有黑客窃取私钥,基本就很难有办法
所以联想到一个端登录后,其他端要登出的这个功能,所以想问下阿老师的回复
写回答
1回答
-
在标准的在jwt中,我们是无法做到“同一时间,只能有一个客户端登录系统,一个端登录后,其他端会立即登录失效,并跳转到登录页”的,因为jwt是无状态的,一经发布就无法撤回、无法取消、也无法由服务端控制失效,这也正是jwt的局限性。
如果想要实现这个功能,需要考虑使用session的方式来进行登录。后端像前端发布一个登录的token,同时这个token也会保存在数据库中。每次发起api请求的时候,服务器都会进入数据库检查请求所携带的token是否有效,有效就允许访问,无效或过期就拒绝这次请求。所以,只要数据库能保存token,那么我们就可以在后端控制token的有效性,就可以实现“同一时间,只能有一个客户端登录系统,一个端登录后,其他端会立即登录失效,并跳转到登录页”。
不过,使用session又会带来分布式的问题,所有,现在比较主流的解决方法是使用redis来保存session(token)信息。
012022-04-18
相似问题