当前位置: 首页 > news >正文

Token

一、JWT 全称 JSON Web Token,说白了就是一段字符串,用点号分成三段:Header、Payload、Signature。
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.
eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIn0.
SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c


c787fb623b4aeddc74f5c8e8b21d3e42

 JWT的三段结构:Header(算法类型)、Payload(用户信息)、Signature(签名),三部分Base64编码后用点号连接

  • Header :声明算法类型(比如 HS256)
  • Payload :存用户信息(用户 ID、角色、过期时间)。只是 Base64 编码,不是加密 ——任何人拿到 token 都能解码看到内容,密码绝对不能放
  • Signature :用 Header + Payload + 服务端密钥算出来的签名,作用是防篡改

JWT认证完整流程:用户登录→服务端签发Token→客户端存储→请求时带上Token→服务端验签登录成功 → 服务端签发 Token → 客户端保存(一般放 localStorage)→ 每次请求在 Header 里带上 `Authorization: Bearer <token>` → 服务端验签,从 Payload 取用户信息。全程不查数据库、不查 Redis,自给自足。 这就是"无状态"的意思。

 

 

二、JWT"无状态"的代价:四个致命场景

   无状态听起来很美,上线后就知道了。

  1. 账号被盗,无法立即踢人 。Token 有效期 2 小时,现在还剩 1 小时 45 分钟。怎么让它立刻失效?纯 JWT 做不到——已签发的 token 在过期前一直有效。
  2. 封禁用户不生效 。账号封了,但手里的 token 还能用。
  3. 改密码不踢其他设备 。用户改了密码,想让其他设备全部失效。纯 JWT 做不到。
  4. token 过期吞表单 。用户填了 20 多分钟的表单,点提交,token 过期了,整个内容全丢。

这四个场景加在一起,几乎是所有正经业务系统都会碰到的问题

三、为什么要把 Token 放 Redis

用户被踢下线时,把 token 加进黑名单。每次请求先查黑名单,在里面就拒。黑名单存哪?内存不行(多台服务器不共享,重启丢),数据库太慢(每个请求都查一次受不了),Redis 最合适 ——查询不到 1ms,分布式共享。

 

// 退出登录时,把 token 加入黑名单
publicvoidlogout(String token){
    long expiration = jwtUtil.getExpiration(token);
    long ttl = expiration - System.currentTimeMillis();
    if (ttl > 0) {
        redisTemplate.opsForValue().set(
            "blacklist:" + token, "1", ttl, TimeUnit.MILLISECONDS
        );
    }
}

// 验证 token 时,先查黑名单
public boolean isTokenValid(String token){
    if (redisTemplate.hasKey("blacklist:" + token)) {
        returnfalse;
    }
    return jwtUtil.verify(token);
}

Redis 只存"已失效"的 token,平时没什么写入,查询也快。还有更彻底的方案:直接把 token 存 Redis,每次验证都去 Redis 查。 这和传统 Session 没太大区别,只是借了 JWT 格式当 Session ID 用。

 

四、双 Token 续期方案

Token 到期了,用户正在操作怎么办?

  • AccessToken :有效期短(30 分钟),做实际鉴权
  • RefreshToken :有效期长(7 天),只用来换 AccessToken

AccessToken 过期,前端用 RefreshToken 换新的,对用户无感。RefreshToken 存 Redis,用户改密码就删掉,自动让他下次操作时重新登录。

五、Redis 本身可靠吗

有人担心引入单点故障。Redis 的高可用方案跑了十几年:

  • Sentinel(哨兵模式) :主节点挂了自动选新主
  • Cluster(集群模式) :数据分片,横向扩展
http://www.zskr.cn/news/1489032.html

相关文章:

  • 基于Python的中国医学数据的分析与应用
  • TDengine 查询引擎概览 — SQL 从客户端到结果集的全景流转
  • 从单目视觉到VIO:重投影误差如何成为多传感器融合的‘粘合剂’?
  • 深度评测 | 北京陪诊公司服务横评:8大品牌真实体验对比(2026年6月最新) - 北京陪诊公司
  • 2026 太原防水补漏服务商口碑测评榜单|全屋渗漏维修机构优选指南 - 宅安选房屋修缮
  • 上海防水补漏哪家靠谱?2026正规修缮公司排名实测 - 苏易修缮
  • Kotlin 协程设计思想(八):suspend 到底是什么?为什么 suspend 不是开启协程?
  • Vivado异步FIFO IP核仿真全流程:从Testbench编写到关键信号(wr_rst_busy)行为解析
  • 基于S08PB16的BLDC电机速度测量与FreeMASTER调试实战
  • Claude Code 的工具延迟加载机制
  • 三阳路空调维修|三阳路空调移机|三阳路空调加氟|三阳路空调回收 高性价比宅到家快速上门 - 武汉宅到家
  • 任何商业行为都要 问这几个问题 ,凭什么轮到你
  • 天赐范式第67天:三分子悬赏令·最终版声明——如果天赐范式没有与之相对应的工程,那我筛选出来的悬赏分子又算什么呢?
  • GEO优化公司避坑指南:2026五强靠谱服务商最新全解析 - GEO优化
  • W55RP20-EVB-MKR 模块 MicroPython 实战 (11):HTTP 协议与 OneNET 平台数据上云
  • 100、安全机制:地理围栏与限高限速
  • NOVELLUS SYSTEMS YSC-BSA01038PLOS / 02-294832-00
  • 串口空闲中断使能到串口空闲中断建立需要多长时间
  • 2026年 IGBT模块、功率模块、可控硅、二极管、整流桥、晶闸管厂家推荐排行榜:高性能与稳定品质之选 - 品牌发掘
  • 革命性微信聊天记录永久保存与智能分析工具:掌握你的数字记忆主权
  • Bilibili 视频合集时长计算最新脚本
  • 思维链 ,Anthropic Mythos模型的 Looped Transformer架构解析,claud为什么厉害性能优越的研究
  • C语言容器中数据的高效串行化和解串--下位机的C语言处理(1)
  • AI Agent 学习指南
  • AMHS自动物料搬运系统实战
  • 2026 泉州防水补漏服务商口碑测评榜单|全屋渗漏维修机构优选指南 - 宅安选房屋修缮
  • 深度测评 | 怎么判断一家竹笋干供应商是否专业?只看产品种类多不多吗?
  • 汽车以太网PHY芯片TJA1102A硬件配置、寄存器驱动与睡眠唤醒实战指南
  • 如何配置WarcraftHelper解决魔兽争霸III现代系统兼容性问题
  • 2026年杭州企业家必读:GEO优化公司选型实战指南与五大厂商深度横评 - 品牌报告