网易首页 > 网易号 > 正文 申请入驻

刷新令牌被盗后:1行代码让黑客的"万能钥匙"瞬间作废

0
分享至


全球每天有超过2300万次会话劫持尝试,其中67%靠偷刷新令牌(Refresh Token)续命。传统JWT验证像只认签名不认人的门卫——只要令牌没过期,谁拿都能进。

这套新方案把数据库变成了"实时黑名单"。用户点下退出登录的瞬间,黑客手里偷来的令牌就变成了电子垃圾。

从"签名即正义"到"数据库说了算"

旧流程的毛病很直观:JWT自包含验证逻辑,服务端验个签名就放行。令牌没过期?合法。签名对得上?放行。至于用户是不是早就点了退出,系统完全不知道。

新方案加了六道关卡。令牌进来先验签名,这是基本功。接着去数据库拉取该用户所有活跃会话,把传入的令牌和每条记录里的哈希值做比对——用的是bcrypt,故意慢点,防暴力破解。

匹配失败直接拒,匹配成功还要看会话有没有被标记过期。最后更新"最后活跃时间",发新的访问令牌。全程数据库是真相来源,JWT只是张带时效的入场券。


代码里有个细节:refreshTokenHash字段在实体上标了select: false,平时查询默认不拿出来,只有显式指定才加载。这是防日志泄露的兜底设计。

性能陷阱与破解之道

遍历比对在用户设备少时没问题。但如果有人同时登了手机、平板、笔记本、浏览器、手表——循环bcrypt比较会变成明显延迟。

优化方案写在注释里:把会话ID塞进JWT的payload。这样直接按ID查单条记录,O(1) vs O(n)的区别。代价是payload多几个字节,令牌变长一点点。

还有个隐性成本:每次刷新都要写数据库更新lastUsedAt。高并发场景下,这行代码可能是瓶颈。要不要异步化?要不要批量写?看业务对"最后活跃"精度的容忍度。

退出登录终于"真退出"了


以前很多系统的退出只是删客户端cookie,服务端令牌还活着。黑客偷到令牌照样用,用户以为安全了,实际裸奔。

现在退出时把数据库里isActive改成false,或者物理删除记录。下次有人拿这个令牌来刷新,第三步比对就找不到匹配项,直接 UnauthorizedException。偷令牌的黑客和用户同时在线?用户一退出,黑客立刻断网。

这套机制还附赠了一个能力:后台可以强制下线指定设备。发现异常登录?查session表,把那条记录标记失效,不需要改用户密码、不需要全局令牌失效。

实现时有个坑要注意:bcrypt比较是异步的,循环里用了await。如果用户会话极多,这串比较是顺序执行的。Node.js单线程,长时间阻塞会影响同进程其他请求。会话ID优化不只是性能问题,也是稳定性问题。

最后一步发新访问令牌,有效期15分钟(900秒)。这是标准的长短令牌配合:访问令牌短命,泄露窗口小;刷新令牌长命,但受数据库约束。两者结合,鱼和熊掌各得其所。

这套方案已经被用在NestJS的生产环境里。如果你正在设计登录系统,会为了安全性接受每次刷新都查库的开销,还是宁愿用纯JWT换取性能?

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
爆!双色球038期开奖:上海狂揽3注近30万二等奖!

爆!双色球038期开奖:上海狂揽3注近30万二等奖!

芭比衣橱
2026-04-09 05:36:57
宁波总经理:我不允许任何人破坏球队团结,一旦出现马上滚蛋

宁波总经理:我不允许任何人破坏球队团结,一旦出现马上滚蛋

懂球帝
2026-04-08 23:48:27
西蒙尼15年首破诺坎普,1张红牌+2脚世界波把巴萨踢进悬崖

西蒙尼15年首破诺坎普,1张红牌+2脚世界波把巴萨踢进悬崖

竞技风云录
2026-04-09 06:21:15
拼多多3元一斤的猪肺,我哭着看完评论区

拼多多3元一斤的猪肺,我哭着看完评论区

风味人间
2026-04-08 12:33:00
随着广东神奇逆转,CBA又乱了!北京广东重回四强,广州悬了

随着广东神奇逆转,CBA又乱了!北京广东重回四强,广州悬了

多特体育说
2026-04-08 23:44:02
华为10年花13820亿做研发,有啥用?苹果小米为啥跟华为不一样?

华为10年花13820亿做研发,有啥用?苹果小米为啥跟华为不一样?

老方
2026-04-08 21:11:34
亚冠0-1,日本劲旅大阪钢巴主场不敌泰国球队,濒临出局

亚冠0-1,日本劲旅大阪钢巴主场不敌泰国球队,濒临出局

侧身凌空斩
2026-04-08 19:54:25
4月必办!2个证件全国发放,人人都有,没领的抓紧办

4月必办!2个证件全国发放,人人都有,没领的抓紧办

呼呼历史论
2026-04-08 16:59:48
一周竟然7次,32岁男子心源性猝死,妻子:劝了很多次,就是不听

一周竟然7次,32岁男子心源性猝死,妻子:劝了很多次,就是不听

健康之光
2026-04-08 10:56:55
伊朗说同意谈判但对美国“完全不信任”

伊朗说同意谈判但对美国“完全不信任”

界面新闻
2026-04-08 09:32:23
别傻了!在澳门输1000万跑回内地,叠码仔的追债手段,比你想的阴

别傻了!在澳门输1000万跑回内地,叠码仔的追债手段,比你想的阴

贱议你读史
2026-04-08 22:29:33
你们都是什么时候对男女之事开窍的?网友:果然还是拦不住有心人

你们都是什么时候对男女之事开窍的?网友:果然还是拦不住有心人

夜深爱杂谈
2026-02-21 21:37:02
燃气公司上门安检,根本不是查漏气!真正目的其实是这3个

燃气公司上门安检,根本不是查漏气!真正目的其实是这3个

阿芒娱乐说
2026-04-08 05:22:19
全红婵已报警,疑似现役/退役跳水运动员、裁判等人参与其中

全红婵已报警,疑似现役/退役跳水运动员、裁判等人参与其中

开成运动会
2026-04-08 22:47:31
王宝强带女友青岛度假,冯清开大G气场全开,身高差真像小娇夫?

王宝强带女友青岛度假,冯清开大G气场全开,身高差真像小娇夫?

娱乐领航家
2026-04-08 20:30:04
李佳琦哽咽宣布将短暂退出直播

李佳琦哽咽宣布将短暂退出直播

第一财经资讯
2026-04-08 23:59:10
GDP双双破14万亿!广东越夜越热闹,江苏为何早早进入休眠模式?

GDP双双破14万亿!广东越夜越热闹,江苏为何早早进入休眠模式?

次元君情感
2026-04-08 12:29:17
交管12123全新升级:违章当天就提醒,4次免罚是真是假?一次讲清

交管12123全新升级:违章当天就提醒,4次免罚是真是假?一次讲清

呼呼历史论
2026-04-09 01:01:46
为什么WTO很少被提起了?中国入世谈判花了15年,如今几乎被架空

为什么WTO很少被提起了?中国入世谈判花了15年,如今几乎被架空

有范又有料
2026-04-07 16:45:46
金主爱相关文章被下架

金主爱相关文章被下架

周边问题研究所
2026-04-07 21:35:39
2026-04-09 06:52:49
硅屿手记
硅屿手记
有态度网友ytd
1492文章数 7关注度
往期回顾 全部

科技要闻

造出地表最强AI,却死活不给你用!

头条要闻

特朗普认为北约未通过“考验” 将考虑“退群”

头条要闻

特朗普认为北约未通过“考验” 将考虑“退群”

体育要闻

40岁,但实力倒退12年

娱乐要闻

侯佩岑全家悉尼度假,一家四口幸福满溢

财经要闻

天津海河乳业回应直播间涉黄

汽车要闻

20万级满配华为全家桶 华境S是懂家庭的大六座

态度原创

教育
健康
游戏
房产
军事航空

教育要闻

“新型啃老”席卷全国:孩子不工作也不伸手要钱,家长害怕毁一生

干细胞抗衰4大误区,90%的人都中招

曝《腐烂国度3》内部测试好玩的很 简直不可思议!

房产要闻

正式动工!珠城马场地块,签约华尔道夫!

军事要闻

文化符号当“弹药” 美伊将信息战带入新阶段

无障碍浏览 进入关怀版