浅谈token

73 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第24天,点击查看活动详情

token是什么?(加密)

  1. token也可以称做令牌,一般由 uid+time+sign(签名)+[固定参数] 组成

    uid: 用户唯一身份标识
    time: 当前时间的时间戳
    sign: 签名, 使用 hash/encrypt 压缩成定长的十六进制字符串,以防止第三方恶意拼接
    固定参数(可选): 将一些常用的固定参数加入到 token 中是为了避免重复查库
    

通俗地讲就是验证当前用户的身份,证明“你是你自己”

  1. token在客户端一般存放于localStorage,cookie,或sessionStorage中。在服务器一般存于数据库中

  2. token 的认证流程

    用户登录,成功后服务器返回Token给客户端。
    客户端收到数据后保存在客户端
    客户端再次访问服务器,将token放入headers中 或者每次的请求 参数中
    服务器端采用filter过滤器校验。校验成功则返回请求数据,校验失败则返回错误码
    
  3. token可以抵抗csrf,cookie+session不行

  4. session时有状态的,一般存于服务器内存或硬盘中,当服务器采用分布式或集群时,session就会面对负载均衡问题。负载均衡多服务器的情况,不好确认当前用户是否登录,因为多服务器不共享session

  5. 客户端登陆传递信息给服务端,服务端收到后把用户信息加密(token)传给客户端,客户端将token存放于localStroage等容器中。客户端每次访问都传递token,服务端解密token,就知道这个用户是谁了。通过cpu加解密,服务端就不需要存储session占用存储空间,就很好的解决负载均衡多服务器的问题了。这个方法叫做JWT(Json Web Token)

关于会使用到token的场景

1.当第一次登录后:

需要将token存储到本地:token必须持久化,不能用户登陆后访问页面一刷新token就没了

需要将token存储到vuex:用户登录后在任何页面发任何请求都需要在请求头里携带token(频繁使用到token)

2.当用户退出后:

1、需要将本地token清除 2、需要将vuex里的token清除 3、强制跳转登录页

token的过期处理

image.png token作为用户的关键令牌信息不是长久有效的,一般都会有一个失效时间(由后端来决定什么时长后失效),如果超过失效时间,当前token就不能再作为用户标识请求数据了,这时候我们需要做一些额外的失效处理

后端:收到用户访问某个接口时,检查当前token是否失效,如果token已经失效,返给前端一个约定好的状态码10002

前端:在响应拦截器中,分析接口的返回值,如果状态码为10002, 则进行token失效操作(和退出功能一致,可直接调用退出功能函数)