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,客户端重试刚才失败的业务请求。用户对此无感知(无感刷新)。

      总结:

      image

       

      posted @ 2026-10-01 21:49  刘宏缔的架构森林  阅读(5)  评论(0)    收藏  举报