fastapi: access_token(访问令牌)和 refresh_token(刷新令牌)的区别
在 JWT(JSON Web Token)认证中,access_token(访问令牌)和 refresh_token(刷新令牌)的核心区别在于用途、有效期以及安全性设计,
两者配合可以在保证安全的同时提供良好的用户体验。
详细解析
1. Access Token(访问令牌)
- 角色:类似于你的“办公室门禁卡”或“短期通行证”。
- 工作机制:客户端每次请求后端受保护的接口时,都要在 HTTP Header(如
Authorization: Bearer <token>)中带上它。
- 设计考量:因为 JWT 是无状态的、服务器默认不保存它的状态(无法轻易在服务端中途主动注销),所以必须把有效期设得很短。
这样即使 Token 被不法分子截获,它也会在短时间内失效,降低安全风险。
2. Refresh Token(刷新令牌)
- 角色:类似于“员工身份证明”或“长期续期凭证”。
- 工作机制:当
access_token过期后,客户端不强制要求用户重新输入账号密码登录,而是自动拿着refresh_token去请求授权服务器。
服务器验证无误后,会签发一组新的access_token(甚至伴随一个新的refresh_token)。
- 设计考量:它的职责非常单一,就是“换发新卡”,不参与任何业务逻辑。它通常会保存在更安全的地方(如前端的
HttpOnly Cookie中,防止被 JavaScript 脚本窃取)。
协同工作流程
- 登录:用户输入密码登录成功,服务器返回
access_token和refresh_token。
- 请求:客户端带着
access_token访问业务数据。
- 过期:
access_token过期,接口返回401 Unauthorized。
- 刷新:客户端拦截到 401 后,静默发送
refresh_token到刷新接口。
- 续期:服务器验证通过,返回新的
access_token,客户端重试刚才失败的业务请求。用户对此无感知(无感刷新)。
总结:

浙公网安备 33010602011771号