双token鉴权
- AccessToken(访问令牌)
- 用于访问受保护的api资源
- 生命周期短 无状态 无需存储
- 通常存储在客户端内存中
- RefreshToken(刷新令牌)
- 当AccessToken过期时 专门用于获取新的
- 生命周期长 与特定用户绑定 服务器需要安全存储其有效性记录
- 客户端必须安全存储 最佳时间是存储在httpOnly Cookie中 这样可以防止客户端JS脚本(如XSS)读取
工作流
- 首次登陆:用户使用用户名和密码登录 服务器验证成功后 返回一个accessToken和一个refreshToken
- 正常请求:客户端将AccessToken存储起来 并在后续的每次API请求中 通过Authorzation请求头将其发送给服务器
- Token过期:当at国企后 客户端再次用他请求API 服务器会拒绝该请求 并返回一个特定的状态码 通常是401
- 拦截401错误:客户端的请求层(如axios拦截器)会捕获这个401错误 此时 不会立即通知用户你已掉线 而是暂停这个失败的请求
- 发起刷新请求:拦截器使用refresh token去调用一个专门的刷新接口
- 处理刷新结果:
- 服务器验证rt有效:返回新的at
- 服务器验证rt无效:返回403 意味着用户的登录会话结束
- 若刷新成功:则用新的at自动重发刚才的API请求,若失败 则客户端清除认证信息 强制用户登出 并重定向到login页面
Last updated on