1. 什么是JWT
JWT全称为(JSON WEB TOKEN),是目前流行做登录认证的工具之一,它是一个非常轻巧的规范
2.库安装
npm install jsonwebtoken
github地址: jsonwebtoken
3.更新策略1
假设一个token
的有效时间为T
;
当超过T小时没有请求过接口则失效;
- 用户携带账号密码访问后端校验。
- 校验成功后生成有效期为
T/2
的token
。 redis
中设置有效期为T
,key
为token
的key-value
。- 当用户访问接口时,如果
token
已经失效了,则去redis
中查找,如果redis
有该token
则生成一个新的token
,替换掉已经失效的token
,重置redis
的有效期时间为T
。如果redis
中没有该token
,说明该token
已经在redis
失效或者是无效token
,则告知用户重新登录
问题1:一旦token
泄露,就可以一值访问 ~_~!
改进1
3
步骤:redis
中设置有效期为T
,key
为userid
,值为token
的userid-token
;10
步骤: 如果存在还要验证token
是否一致,保证是最新的token
;
这样以来就可以在token泄露的时候重新登录更新redis
中的token
,在原token
失效后就无法再更新token
;
但是一般token
的有效时间T
都是比较大(比如10天);
问题2:token
泄露后有效时间过长
改进2
2
步骤:校验成功后生成有效期为t(尽可能短)
的token
;
问题2:token
传输过于频繁
改进3
- 采用一个
access_token
访问资源。 - 采用一个
refresh_token
更新access_token
。
sso图解: