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

来源:11-9 【应用】定制用户模型并添加初始化用户数据

南船座

2022-04-13

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

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

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

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

写回答

1回答

阿莱克斯刘

2022-04-17

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

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

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


0
1
南船座
非常感谢!
2022-04-18
共1条回复

.Net 开发电商后端API 从0到精通RESTful

. Net 实战+RESTful思想纵深课程,开发优雅RESTful风格API。

994 学习 · 553 问题

查看课程