大佬们好, JWT 如何防止多端登录 ?

2024-03-15 15:09:02 +08:00
 junwind

如题,现在登录,我使用了 JWT 机制,但是怎么防止一个用户,在多个设备上登录呢?

9897 次点击
所在节点    程序员
55 条回复
HarrisonLee
2024-03-15 15:41:12 +08:00
既然你这样问了,那么普通 token 也适合你,为什么要使用 jwt ?
crazyweeds
2024-03-15 15:54:13 +08:00
如果你要防止,那么就不能用这种无状态方案。
当然,现实中能够见到不少用 JWT 然后又限制单个设备登录的傻缺方案,他们又维护了这个 token ,搞笑。
如果你这个特性是硬性要求,综合用户体验,可以考虑分布式 session 共享方案,或者自己用 http header + token 实现一套,更简单有效。。
imokkkk
2024-03-15 17:01:04 +08:00
加一层 Redis
joker8ren
2024-03-15 17:02:15 +08:00
要么 session 要么放 token 做检测
Yukineko
2024-03-15 17:09:49 +08:00
直接换成 session
hideon
2024-03-15 17:10:34 +08:00
JWT 设计用于无状态的,单端登录回归有状态,请在服务端自行记录登录状态
type
2024-03-15 17:13:04 +08:00
那就没必要使用 JWT
siweipancc
2024-03-15 20:52:41 +08:00
回退到 session 设计,这是个永恒的话题哈哈哈,无解的。最大的作用也就是解决了某些人的 cookie 焦虑而已。
rekulas
2024-03-15 21:21:22 +08:00
加个中间件就行了, 验证的时候都要过一遍,有些人直接用的服务器,有些人用的 redis 集群

楼上一些觉得不该用 jwt 的可能过于理想化了, 因为现在很多系统都基于 jwt 概念验证而开发, 你接手后因为自身业务需求想限制登录, 没必要去把整个 jwt 换掉,这样改动工作量会比较大而且可能引来未知的 bug(因为 jwt 不仅仅代表登录有些系统可能还用来传递权限之类), 只需要入口或中间层加验证就行了, 改动是最小的, 我们之前系统就有这样的需求
BEza5k2j7yew0VN9
2024-03-16 01:11:33 +08:00
在新设备登录时创新的 token ,吊销旧 token ,服务端只允许一个 token 存在
lilei2023
2024-03-16 07:49:22 +08:00
@angel001ma 这和单点登录有啥关系?误人子弟!
demonzoo
2024-03-16 09:37:26 +08:00
这种场景就别用 jwt 了吧,用 session
me1onsoda
2024-03-16 09:40:42 +08:00
设计的人是个二把刀
cndenis
2024-03-16 09:58:39 +08:00
用啥技术都是为了符合需求的, JWT 和 session 机制同时用也不代表就不合理. 比如说普通浏览仅验证 JWT, 在关键操作中才验证 session, 在某些场合中也是可行的嘛, 为啥非要冷嘲热讽呢
ic3z
2024-03-16 10:03:02 +08:00
登录生成 token 的时候看用户有没有别的有效 token ,有的话把原先的 token 清空。 要配合 jwt 验证机制。
R4rvZ6agNVWr56V0
2024-03-16 10:31:22 +08:00
最简单的做法是使用用户状态,在用户登录时,将用户状态(如“已登录”)存储在服务器端。每次用户发起请求时,服务器都会检查用户状态。如果用户状态为“已登录”,但请求中的 Token 与服务器中的 Token 不匹配,说明用户可能在另一个设备上登录,可以拒绝该请求
zhongjun96
2024-03-16 10:37:31 +08:00
@yrzs #5 这样 jwt 就没意义了,不如直接一个 uuid-token
Azure99
2024-03-16 10:57:00 +08:00
jwt 本身就是为了无状态设计的,你要是服务端再维护一个状态,和 session 有什么区别?
hidemyself
2024-03-16 11:15:37 +08:00
不适合用 jwt,改造一下
yogogo
2024-03-16 11:33:46 +08:00
你应该是维护一个用户的 token 关联登陆设备信息,每次登陆后,关联 token 跟登陆设备信息,然后请求使用的时候检查使用 token 的设备是不是跟登陆设备信息一样

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1023997

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX