【概念】什么是 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:
- Access Token(访问用的,短生命周期,比如 15分钟)
- 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
- 重新发送之前失败的请求
- 自动用 refreshToken 去调用
🛠 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 Token | Refresh Token | |
---|---|---|
生命周期 | 短(15分钟) | 长(7天、30天) |
存储 | 通常存在内存或 HttpOnly cookie | 安全存储(cookie、localStorage) |
用途 | 调用 API 时验证 | 刷新 Access Token |
过期后 | 需要刷新或重新登录 | 重新登录 |