名词说明:
- token过期时间:英文“ttl”,就是token经过多少秒后失效(单位:秒),通常设置30分钟即可
- 黑名单宽限时间:英文“blacklist_grace_period”,就是token过期后放入黑名单下,经过多少秒就会完全失效(单位:秒),通常设置10秒即可
- token刷新时间:英文“refresh_ttl”,就是token过期后在多少秒内可以兑换新的token(单位:秒),通常设置14天即可
传输途径:
- header:前端可以使用请求头传输token,后端可以使用响应头传输token(至于名字前后端自己约定)
- cookie:好处是后端签发的token不需要前端操作自动就会带上;坏处是个别环境不支持cookie,比如小程序、浏览器的无痕模式。
- param:前端通过请求参数传输token,后端通过响应参数传输token。坏处是不安全,有心之人也会容易拿到
前后端操作流程:
1.前端:通过登录页面提交账号密码
2.后端:验证账号密码,正确则返回token数据(通过header、cookie、param任意一种或几种即可)
3.前端:保存token数据到本地存储,每次访问都带上该token(通过header、cookie、param)
4.后端:需要会话的接口验证token是否存在、有效,以及是否过期
(1)存在、有效、没有过期,那就正常访问接口(检查token过期时间ttl)
(2)过期了,并且没有在黑名单下,那就将该token放入黑名单,并签发一个新的token(通过响应头、cookie、参数返回),并且正常访问接口(检查token刷新时间)
(3)过期了,并且在黑名单下,没有超过黑名单宽限时间,正常访问接口(检查token黑名单宽限时间blacklist_grace_period)
(4)过期了,并且在黑名单下,超过了黑名单宽限时间,判定该token无效
(5)无效的情况还有一种,token过期了,但是超过了 token可以刷新时间,那也是无效的token(检查token刷新时间refresh_ttl)
5.前端:
(1)可以使用cookie的环境,如果后端签发token通过cookie返回,那每次token过期,后端签发的新token都会在前端访问接口时自动带上,无需做任何操作。
(2)不可以使用cookie的环境,比如小程序、浏览器无痕模式,每次token过期都会签发一个新的token并通过header返回,前端只需要用新token替换旧token,这样每次都会带上新token了。