请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

在jwt中,如何实现这样的功能:同一时间,只能有一个客户端登录,一个端登录后把其他端踢掉

老师,您好,很仔细的看完了这一章
今天我去面试netcore高级开发,被问到了这个问题
就是实现这样的功能,在jwt中,如何实现这样的功能:同一时间,只能有一个客户端登录系统,一个端登录后,其他端会立即登录失效,并跳转到登录页

阿老师能和我讲讲大概操作原理,需要用到的技术,和对应的博客文章吗?

我记得阿老师讲过这段话——在jwt中,一旦token生成后,除非等到失效时间,否则基本不会被注销,万一有黑客窃取私钥,基本就很难有办法

所以联想到一个端登录后,其他端要登出的这个功能,所以想问下阿老师的回复

正在回答

1回答

在标准的在jwt中,我们是无法做到“同一时间,只能有一个客户端登录系统,一个端登录后,其他端会立即登录失效,并跳转到登录页”的,因为jwt是无状态的,一经发布就无法撤回、无法取消、也无法由服务端控制失效,这也正是jwt的局限性。

如果想要实现这个功能,需要考虑使用session的方式来进行登录。后端像前端发布一个登录的token,同时这个token也会保存在数据库中。每次发起api请求的时候,服务器都会进入数据库检查请求所携带的token是否有效,有效就允许访问,无效或过期就拒绝这次请求。所以,只要数据库能保存token,那么我们就可以在后端控制token的有效性,就可以实现“同一时间,只能有一个客户端登录系统,一个端登录后,其他端会立即登录失效,并跳转到登录页”。

不过,使用session又会带来分布式的问题,所有,现在比较主流的解决方法是使用redis来保存session(token)信息。


0 回复 有任何疑惑可以回复我~
  • 提问者 南船座 #1
    非常感谢!
    回复 有任何疑惑可以回复我~ 2022-04-18 09:47:05
问题已解决,确定采纳
还有疑问,暂不采纳
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号