如果用户一直在操作,当jwt颁发的token凭证到了过期时间需要有一个机制能自动延长过期时间。除非用户长时间没有操作,那是需要强制重新登录的。
常用的解决方案有双令牌机制以及令牌缓存机制。
双令牌机制一次颁发两个令牌,access_token和refresh_token,通常刷新凭证时间更长。身份认证的时候先验证访问凭证,如果验证通过就放行。如果访问凭证过期了,验证刷新凭证。如果刷新凭证没有过期,服务器重新颁发两个新的凭证给客户端,同时放行请求,如果刷新凭证也过期了,就拒绝请求,客户端需要重新登录了。
令牌缓存机制是借助redis来存储token,同时设置过期时间,这个过期时间通常更长,参考双令牌机制的刷新令牌的过期时间。身份认证的时候先验证token,如果验证通过就放行。如果token过期了,验证redis。如果redis没有过期,服务器重新颁发token给客户端,同时放行请求,如果redis也过期了,就拒绝请求,客户端需要重新登录了。
这两种思路差不多,都是提供一个更长的过期时间来让客户端能自动刷新token,这个刷新token的操作用户是不感知的。
相对来说双令牌机制服务器不需要存储状态,所以更加推荐