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

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

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

9878 次点击
所在节点    程序员
55 条回复
angel001ma
2024-03-15 15:11:34 +08:00
搜索单点登陆
OutOfMemoryError
2024-03-15 15:12:29 +08:00
@angel001ma #1 单点登录指的是在单个站点登录后同步其他站点的登录状态,不是防多端登录用的吧
996635
2024-03-15 15:14:48 +08:00
防止多端登录和 JWT 没关系, 后端维护 token 的生效状态即可
liuhan907
2024-03-15 15:15:01 +08:00
jwt 就是为了给你多端登陆用的,你现在要防止。
yrzs
2024-03-15 15:15:13 +08:00
将 jwt 存入 redis,判断 token 是否是 redis 里的
Akitora
2024-03-15 15:15:16 +08:00
感觉 JWT 就主打一个无状态,在服务端和客户端都再额外维护一个状态绑定设备有点怪怪的
Helios0
2024-03-15 15:16:31 +08:00
JWT 不支持,本身就是面向离线的设计,你说的这个场景是 session 。
NessajCN
2024-03-15 15:16:38 +08:00
jwt 只是个验证工具,对于用户的登录端的限制需要你自己写 session control
因为很显然,你要防止用户多端登录,首先需要服务端知道用户已经登录
fengzhongdeyihan
2024-03-15 15:18:50 +08:00
返回 jwt token 之前绑定 uid 和 token 到 redis 中.
然后校验的时候拿 jwt 的里面的 token 和 redis 里面的 token 对比.
tonywangcn
2024-03-15 15:19:17 +08:00
签发 jwt 时,把 session id 放到 token 中
0o0O0o0O0o
2024-03-15 15:19:45 +08:00
有状态与 JWT 在本站能不能算排名前十的技术争论主题?
fkdog
2024-03-15 15:19:56 +08:00
jwt 关联设备 id ,设备 id 可以直接存在 jwt 里或者服务端存储,检测到请求对应的设备 id 与签发 jwt 的设备不一致则直接拒绝访问。
wunonglin
2024-03-15 15:20:05 +08:00
你这是有状态的需求。明显是不符合 JWT 的使用逻辑强上。
thinkershare
2024-03-15 15:21:28 +08:00
JWT 不支持你这个功能,你不应该使用 JWT 维护用户的 SESSION.
javalaw2010
2024-03-15 15:22:24 +08:00
防止不了,jwt 本身是无状态的协议,你要防止多端登录,就必须记录 token ,此时 jwt 就退化为 session 了,所以我一直觉得目前的风气有点滥用 jwt ,所以我新项目中的都使用最简单的随机字符串作为 token 了,所谓返璞归真吧。。。
cat
2024-03-15 15:22:53 +08:00
@0o0O0o0O0o 能,我发现很多人没懂 jwt 到底是啥意思 干嘛的,一味的想用来取代 session
lonenol
2024-03-15 15:32:54 +08:00
你想想用传统的 cookie session 怎么防止多端登录呢?
chendy
2024-03-15 15:38:42 +08:00
@cat 按照近几年面试经验,主要是培训机构都教
EasyProgramming
2024-03-15 15:40:49 +08:00
1.使用手机号生成 jwt 字符串

2.用户登陆后,使用手机号作为 key ,jwt 字符串作为 value ,存入 redis ,将 jwt 字符串作为 token 下发给用户

3.用户访问时,后端解析用户传入的 jwt 字符串( token ),拿到手机号后,使用手机号去 redis 查询对应的 jwt 字符串,校验是否和一致

以上三步,可以实现你的需求
Biluesgakki
2024-03-15 15:41:02 +08:00
确实很奇怪 不过要实现就把 token 放 redis 就行 上线的时候强行把原来有的踹了

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

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

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

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

© 2021 V2EX