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

JWT认证看似完美:签发后却无法撤回,短时效刷新令牌才是解

0
分享至

一个无状态的令牌,服务器签完就不再过问,任何持有相同密钥的服务都能独立验证,连数据库都不必查询。听起来像分布式系统的理想认证方案,但它藏着一个天生无法回避的缺陷:一旦签发,在过期之前你没法让这个令牌立刻作废。

这是 NestJS 系列文章的第二篇,之前聊过小团队 Git 协作,代码仓库和分支模型就绪后,首先要上的就是认证——它会触及每个后续功能。本文覆盖的范围很明确:用 Passport 和 @nestjs/jwt 签发、验证访问令牌,构建 auth 模块,以及那些上线后总让团队头疼的坑。至于刷新令牌、轮换和撤销,它们值得单独一篇长文,塞在一起只会把真正引发事故的部分一笔带过。


JWT 的本质是一组经过签名、自包含的用户声明。服务端签发一次,此后任何持有签名密钥(或公钥,如果用了非对称签名)的服务都能离线验证,无需查数据库,也无需求助会话存储。这整套价值主张就落在“无状态验证”这五个字上。

这种特性在不止一个后端进程时才开始凸显。单实例、粘性会话的巨石应用几乎享受不到 JWT 的好处;一套用 Redis 托管的会话 cookie 就能以更低的复杂度搞定。可一旦负载均衡后面挂了多台 API 实例,或者某个独立服务要验证调用者身份而又不愿直连主库,无状态令牌就能省下一次网络往返和一套共享状态的依赖。

代价也同样真切:JWT 一旦发出,过期前就收不回来。服务端没有内置的“把这名用户立刻踢下线”的能力,除非你自己搭一套撤销机制。这几乎决定了所有后续设计的走向,也是为何需要把访问令牌的寿命压得很短,并与一个独立的刷新令牌机制搭配——这正是下一篇文章的主题。

NestJS 的 @nestjs/passport 和 @nestjs/jwt 包提供了构建积木。经过多个项目打磨后稳定下来的模块形状是:一个 AuthModule 掌管登录和令牌签发,一个 JwtStrategy 供 Passport 在校验进来令牌时调用,再用一个 JwtAuthGuard 来保护路由。

依赖安装十分直接:npm install @nestjs/passport @nestjs/jwt passport passport-jwt,外加对应的类型声明。接下来搭建模块时有一条铁律——令牌的密钥和过期时间必须来自配置,绝对不能在代码里写死。

模块的接线从 ConfigModule 和 JwtModule 开始,利用 ConfigService 将密钥和环境变量注入 JwtModule 的 secret 和 signOptions。这样一来,任何环境切换都只需改一处配置,而不是去翻业务代码。这个 auth.module.ts 只是起手式,紧跟着会建立 AuthService 处理登录校验与令牌签发,AuthController 暴露登录端点——但最核心的安全考量其实落在 JwtStrategy 如何从负载中还原用户,以及 JwtAuthGuard 如何拒绝不合规的请求。

团队在真实环境里踩的坑往往不在源码里,而在思维惯性上。把访问令牌的有效期设成几小时甚至几天,是早期最常犯的错;忘记刷新令牌意味着一旦令牌被泄露,攻击窗口就会被拉到失效时间那么长。另外,一旦产品要求管理员能“强制下线某个用户”,开发者才惊觉 JWT 根本不支持,这时要么引入黑名单,要么改造令牌版本号,而这些都不是一天能补好的。所以从一开始就规划短时效访问令牌和独立的刷新路径,远比事后打补丁便宜。

明白了 JWT 能给你什么,也清楚它给不了你什么之后,NestJS 内建的这些工具才能被用在刀刃上。下一篇文章会完整拆解刷新令牌、轮换和撤销的具体实现,把本文有意留出的那块短板补齐。

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

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.

相关推荐
热点推荐
要不了多久,中国最值钱的不是房子车子,而是这四样

要不了多久,中国最值钱的不是房子车子,而是这四样

巢客HOME
2026-07-16 06:00:08
艺人李权哲高铁占座,铁路部门回应

艺人李权哲高铁占座,铁路部门回应

新京报
2026-07-26 18:30:44
马特·达蒙为演奥德修斯暴瘦至167磅:半年称重饮食,戒啤酒

马特·达蒙为演奥德修斯暴瘦至167磅:半年称重饮食,戒啤酒

灰度测试中
2026-07-26 20:24:20
超10万阿根廷球迷请愿重赛世界杯决赛,本国足协:西班牙赢得光明正大

超10万阿根廷球迷请愿重赛世界杯决赛,本国足协:西班牙赢得光明正大

林间小温柔
2026-07-26 01:15:01
夏洛特·希金斯:诺兰《奥德赛》忠于结构,却抛弃了荷马史诗的黑暗与诙谐

夏洛特·希金斯:诺兰《奥德赛》忠于结构,却抛弃了荷马史诗的黑暗与诙谐

爬虫饲养员
2026-07-26 03:50:57
中央电视台录播2026年7月27日至8月2日乒乓球比赛

中央电视台录播2026年7月27日至8月2日乒乓球比赛

乒乓球球
2026-07-27 05:00:39
命中!伊朗,下狠手了!

命中!伊朗,下狠手了!

财经要参
2026-07-26 07:24:32
太辣眼睛!大妈炫耀儿子有貌有才,北美留学,被扒出儿子已成白人的小娇夫!

太辣眼睛!大妈炫耀儿子有貌有才,北美留学,被扒出儿子已成白人的小娇夫!

川渝视觉
2026-07-22 12:42:03
一架歼-35A被外媒发现首次亮相于西部某机场!就等于全面铺开?先别急着替空军点名

一架歼-35A被外媒发现首次亮相于西部某机场!就等于全面铺开?先别急着替空军点名

战争与帝国
2026-07-26 21:48:02
真是毁三观!释永信21年前与刘立明在郑州发生关系的笔录曝光

真是毁三观!释永信21年前与刘立明在郑州发生关系的笔录曝光

魔都姐姐杂谈
2025-07-28 14:35:36
天庭饱满地阁方圆,才是真正的大气美人

天庭饱满地阁方圆,才是真正的大气美人

小椰的奶奶
2026-07-27 01:59:50
连续两场被弃用!男篮离队第一人或出炉 郭士强欲培养19岁新星后卫

连续两场被弃用!男篮离队第一人或出炉 郭士强欲培养19岁新星后卫

大卫的篮球故事
2026-07-26 20:40:28
充电宝行业,差不多走到头了

充电宝行业,差不多走到头了

花朵财经
2026-07-26 14:30:13
DNA揭开隔代血缘真相:孙子最亲的其实不是爷爷奶奶

DNA揭开隔代血缘真相:孙子最亲的其实不是爷爷奶奶

粤语音乐喷泉
2026-07-25 15:16:01
耗资4亿,票房惨淡,上映1天就被判死刑,明星云集的大片惨败出局

耗资4亿,票房惨淡,上映1天就被判死刑,明星云集的大片惨败出局

手工制作阿歼
2026-07-26 19:28:25
《功夫女足》刚冲破20亿,周星驰就公开承诺,对张小斐称呼也变了

《功夫女足》刚冲破20亿,周星驰就公开承诺,对张小斐称呼也变了

白面书誏
2026-07-25 22:08:29
很多人不知道,当年和邓煜同登奥数赛场、同在燕园求学的,还有一位传奇天才柳智宇

很多人不知道,当年和邓煜同登奥数赛场、同在燕园求学的,还有一位传奇天才柳智宇

爱下厨的阿椅
2026-07-25 14:43:34
女子谈释永信过往,她们姐妹住少林寺3天2夜,争着往释永信房间跑

女子谈释永信过往,她们姐妹住少林寺3天2夜,争着往释永信房间跑

江山挥笔
2025-07-29 16:50:59
正式退场!汽车3大“反人类设计”被国家封杀!特斯拉全中招

正式退场!汽车3大“反人类设计”被国家封杀!特斯拉全中招

另子维爱读史
2026-07-20 21:34:37
中科大校领导名单引热议!部门繁多、领导扎堆,被批“大学行政化”,网友:还能专心搞学术吗?

中科大校领导名单引热议!部门繁多、领导扎堆,被批“大学行政化”,网友:还能专心搞学术吗?

谭谈社会
2026-07-25 17:57:34
2026-07-27 06:24:49
闪存猎手
闪存猎手
全网蹲好价的野生捕手,算力与羊毛都不可辜负。
302文章数 59关注度
往期回顾 全部

科技要闻

传DeepSeek 100亿元新一轮融资突然放缓

头条要闻

邓煜舅舅发声:我们全家学霸 他那辈全部保送顶尖学府

头条要闻

邓煜舅舅发声:我们全家学霸 他那辈全部保送顶尖学府

体育要闻

詹姆斯的最后一集,依旧最艰难的路?

娱乐要闻

演员王建隆在家中去世,年仅43岁

财经要闻

232亿,巴黎水被卖了

汽车要闻

轿跑姿态+大空间/标配655km续航 奇瑞风云A9置换价10.68万起

态度原创

本地
亲子
教育
数码
健康

本地新闻

跟着影视去旅行:西游篇

亲子要闻

备孕黄金期是什么时候?

教育要闻

厉害!金中学生,研学自制研学纪录片被江西官方点赞

数码要闻

古尔曼:苹果智能眼镜计划最早在明年WWDC27上亮相、同年秋季发售

教你三步快速识别中风

无障碍浏览 进入关怀版