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

【概念】什么是 JWT Token?

—什么是 JWT Token?

JWT Token(JSON Web Token)
就是一张后端发给前端的小票,里面包含用户身份信息,用于做无状态认证(Stateless Authentication)

每次前端访问后端接口,都拿着这张小票去验证自己是谁。

🔵 特点

  • 体积小,传输快(就是字符串)
  • 安全(签名加密,无法伪造)
  • 服务器不用存储 Session,减轻压力(无状态)

🔵 使用场景

  • 登录认证
  • 授权控制(admin / user)
  • 单点登录(SSO)

🔥 那么问题来了:JWT 本身有个小缺点!

JWT 有过期时间,比如:

{ expiresIn: '3d' } // 三天后失效

如果三天后 token 过期了,前端就必须让用户重新登录 ➔ 很烦!

比如:

  • 你打开一个网站,结果因为 token 过期,突然弹出让你重新登录
  • 用户体验差,流失率高

✅ 这时候就用到 Refresh Token机制 来救场!

🎯 什么是 Refresh Token?

  • 服务器在用户登录时,同时发两个 token:

    1. Access Token(访问用的,短生命周期,比如 15分钟)
    2. Refresh Token(续命用的,长生命周期,比如 7天、30天)
  • 当 Access Token 过期时:

    • 前端拿着 Refresh Token 向服务器请求一个新的 Access Token
    • 用户无感知刷新,不用重新登录!

🔵 过程流程:

[第一次登录] -> 
服务器发回 { accessToken + refreshToken } ->
前端保存起来每次访问 -> 带上 accessToken如果 accessToken 过期 -> 
用 refreshToken 去请求新的 accessToken
-> 
拿到新 accessToken,继续访问

📦 一个 Refresh Token 机制小案例

后端(伪代码)

// 登录成功后
const accessToken = jwt.sign({ id: user._id }, ACCESS_SECRET, { expiresIn: '15m' });
const refreshToken = jwt.sign({ id: user._id }, REFRESH_SECRET, { expiresIn: '7d' });// 返回给前端
res.json({ accessToken, refreshToken });

前端(伪流程)

  • 每次请求 API,都带上 accessToken
  • 如果 accessToken 返回 401(过期)
    • 自动用 refreshToken 去调用 /api/auth/refresh
    • 拿到新的 accessToken
    • 重新发送之前失败的请求

🛠 Refresh Token API 示例

// 刷新 accessToken
app.post('/api/auth/refresh', (req, res) => {const { refreshToken } = req.body;if (!refreshToken) return res.sendStatus(401);jwt.verify(refreshToken, REFRESH_SECRET, (err, decoded) => {if (err) return res.sendStatus(403); // refresh token 无效或过期const newAccessToken = jwt.sign({ id: decoded.id }, ACCESS_SECRET, { expiresIn: '15m' });res.json({ accessToken: newAccessToken });});
});

📖 中文总结一句话

Refresh Token机制 = 提供一个长期有效的小票(Refresh Token),当短期小票(Access Token)过期时,无需重新登录,通过刷新拿到新小票,继续访问。


📖 英文总结(用于Assignment Report)

Refresh Token is a mechanism that issues a long-lived token alongside a short-lived Access Token during user login.
When the Access Token expires, the client uses the Refresh Token to obtain a new Access Token without requiring the user to re-authenticate.
This improves user experience and maintains session continuity.


🚀 为什么大型项目一定用 Refresh Token?

项目影响
没有 Refresh Token用户一段时间后需要重新登录,体验差
有 Refresh Token用户可以无感知地保持登录状态,体验好,粘性高

🔵 常见应用:

  • Google、Facebook、AWS后台
  • 任何高级 Web App / Mobile App

🎯 总结表格

Access TokenRefresh Token
生命周期短(15分钟)长(7天、30天)
存储通常存在内存或 HttpOnly cookie安全存储(cookie、localStorage)
用途调用 API 时验证刷新 Access Token
过期后需要刷新或重新登录重新登录

http://www.xdnf.cn/news/2375.html

相关文章:

  • JAVA多线程(8.0)
  • matlab实现稀疏低秩去噪
  • day7 python针对心脏病数据集预处理
  • Java ThreadLocal与内存泄漏
  • 黑马Java基础笔记-4
  • 青少年CTF-贪吃蛇
  • YOLOv11改进:RevColV1可逆列目标检测网络(特征解耦助力小目标检测)
  • 写入cache时数据格式错误产生的ERRO导致整个测试框架无法运行
  • 大模型时代的语言格局演变:为什么是 JavaScript?
  • PyTorch数据加载与预处理
  • 模板引擎语法-过滤器
  • TeaCache原理及代码
  • 泛型进阶之通配符
  • import tree # pip install dm_tree ModuleNotFoundError: No module named ‘tree‘
  • 如何导出1寸分辨率为300及以上的照片?
  • 常见cmd命令
  • 基于PyTorch的图像识别主要依赖于深度学习模型(尤其是卷积神经网络,CNN)对图像特征进行自动学习和分类
  • tigase源码学习杂记-IO处理的线程模型
  • Python-MCPServerStdio开发
  • python输出
  • 防火墙规则配置错误导致的网络问题排查
  • Tauri v2 配置全解析(完整版)
  • Eigen线性代数求解器(分解类)
  • 内存大冒险
  • ai与望闻问切
  • 2025最新Facefusion3.1.2使用Docker部署,保姆级教程,无需配置环境
  • C语言输入输出完全指南:从基础到文件操作
  • MCP 协议解读:STDIO 高效通信与 JSON-RPC 实战
  • Java大师成长计划之第4天:Java中的泛型
  • Android Gradle插件开发