看之前需要了解一下原生token和jwt的工作原理
- 背景提要
jwt 是 原生token 会话的下一代,具有自验证的功能。他的改进是把原生token的有状态(服务端存储)设计模式改为了无状态(服务端无需存储)设计模式。解决了服务器端要存储大量会话信息的问题。所以,用jwt,就不应该在服务器端存储之,不然用以前的uuid生成的token不就好啦。
- 问题说明
jwt怎么续期。jwt 生成以后就是不可修改的,所以这里的续期指的是返给客户端新的jwt。
所以今天讨论的主题准确点说应该是:jwt的刷新机制
- dis部分
奔着这个主题到Google和度娘怀里游了一个多月,却发现近乎八九成的搜索结果都是要服务端存贮jwt。WTF。。。
- 亮明观点
其他的文章有建议每次请求都刷新的(太空垃圾真的没影响吗),也有建议客户端自己判断过期时间主动请求刷新的(说好的前端无感知呢),唯一觉得可行的是:前端每次请求都携带access_token和refresh_token,后端验证access_token过期后,用refresh_token去鉴权中心重新获取access_token和refresh_token(所以这个地方要保证refresh_token的过期时间比access_token过期时间长,觉得两倍的时间最合理)。如果验证refresh_token也过期,则直接反馈前端会话过期,让前端重新登陆。
采用最后这种方案就是我的观点