引言
最近几天被频繁问到了关于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访问需要认证的接口。
提问
- 和传统的鉴权方式有什么区别?
答: 多个服务器的时候,使用session的话十分占用服务器的资源,而使用token的话,服务端只要保存一个key就可以了。 - 多个请求的时候,多次鉴权,如果Access Token过期了,多个Access Token?
答:我整个时间过程使在路由请求之前使用中间件鉴权,类似于router.get('/', authorization(), controller.home.home.index);
,authorization
是在一个路由跳转之前的,只会有一次,此次要么更新access Token,要么跳转到登录页,所以最后我们再页面里面请求的时候都是可用的access Token。 - 为什么要用refresh Token?
答:主要是方便服务端禁用用户的Token,只需要将refresh Token禁用或者删除即可。
结语
JWT的使用提高了健全的功能和效率,用起来挺好的emmm
早点休息!!