HTTP有个让人头疼的特性:每发一次请求,服务器就"失忆"一次。你刚登录完,刷新个页面,它又不认识你了。
传统做法是让服务器背"小抄"——建个session表,存你的登录状态。但用户一多,数据库查询就成了瓶颈。
打开网易新闻 查看精彩图片
JWT(JSON网络令牌)换了个思路:把身份信息直接写进令牌里,服务器只负责验签名,不用存任何东西。
打个比方:住酒店时,前台验证身份证后给你房卡。之后进房间只刷卡,门锁不打电话问前台。JWT就是你的房卡,门锁只认卡上的加密签名。
一个JWT长这样:三段字符串用点号拼接,分别是头部(声明算法)、载荷(用户数据)、签名(防篡改)。服务器用密钥验签后,直接读取载荷里的用户ID和权限,全程零数据库查询。
在Node.js里实现这套流程很直接:登录接口验证密码后签发令牌,中间件拦截后续请求验签,通过就把用户信息挂到请求对象上。没有session存储,集群部署时也不用操心状态同步。
这套机制特别适合微服务和无服务器架构——毕竟,让服务器"什么都不记",反而更容易扩展。
热门跟贴