基于前后端考虑的鉴权

后端层面

  • 前端登录成功之后,后端拿到useID,之后后端生成一个随机的密钥,密钥+useId来生成签名(token)返回给前端,同时把Jti(JWT id)存在redis里面(后端每次都随机生成密钥提高了安全性,jti存储在redis里面提高了读取速度)
  • 前端带token去请求,后台decode token 得到jti,拿到redis里面查是否有对应的jti,如果有就认为是合法的

前端层面

前端拿到token的存储有三种方式

  1. sessionStorage ,浏览器关闭就没了。

  2. 存 localstorage 就一直都在,后端返回过期标识时前端主动清除

  3. 存cookie的话,后端可以过期主动清除cookie, 前端在此过程中主要配合跳转到登录页就行

对于vue,为解决浏览器刷新路由重置的问题

拿到token后要将其保存到sessionStorage,根组件的created钩子负责检查本地是否已有token,如果有则无需登录直接用该token获取权限并初始化,如果token有效且当前路由有权访问,将加载路由组件并正确展现;若当前路由无权访问将按路由设置跳转404;如果token失效,后端应返回4xx状态码,前端统一为axios实例添加错误拦截器,遇到4xx状态码执行退出操作,清除sessionStorage数据并跳转到登录页,让用户重新登录。

Tags: