说一说JWT鉴权

引言

最近几天被频繁问到了关于jwt得内容,决定写一篇作文加深一下印象。

正文

jwt介绍

JWT是JSON Web Token的缩写。
分为三段(整个为base64编码):

  • 头部:包括加密方式
  • 负载:包括用户的不敏感信息
  • 签名:用secret将前两部分加密(利用第一个里面的加密方式),主要用来验证是不是本人签发的

实践过程

实践过程中有两个token,一个refresh Token、一个access Token。refresh token的作用就是使access token过期的时候更新access token。
具体流程如下:

  • 客户端使用用户名和密码进行验证
  • 服务端生成有效时间较短的Access Token,和有效时间较长的Refresh Token
  • 客户端访问需要认证的接口时,携带Access Token
  • 如果Access Token没有过期,那么久鉴权后返回客户端需要的数据
  • 如果鉴权失败(例如返回401错误),则使用Refresh Token向刷新接口申请新的Access Token
  • 如Refresh Token没有过期,服务端向客户端发新的Access Token
  • 客户端使用新的Access Token访问需要认证的接口。

提问

  1. 和传统的鉴权方式有什么区别?
    答: 多个服务器的时候,使用session的话十分占用服务器的资源,而使用token的话,服务端只要保存一个key就可以了。
  2. 多个请求的时候,多次鉴权,如果Access Token过期了,多个Access Token?
    答:我整个时间过程使在路由请求之前使用中间件鉴权,类似于router.get('/', authorization(), controller.home.home.index);authorization是在一个路由跳转之前的,只会有一次,此次要么更新access Token,要么跳转到登录页,所以最后我们再页面里面请求的时候都是可用的access Token。
  3. 为什么要用refresh Token?
    答:主要是方便服务端禁用用户的Token,只需要将refresh Token禁用或者删除即可。

结语

JWT的使用提高了健全的功能和效率,用起来挺好的emmm
早点休息!!

你可能感兴趣的:(javascript)