众所周知,jwt token一旦颁发出去后,是没法强制设置过期的。有没有什么方式能强制token过期,实现登出效果吗?我说下我的思路,我用redis存储所有强制登出的token,不一定是最好的解决方案。
颁发token
这个没什么好说的,用户登录后,通过Identityserver4生成token及refreshToken。
强制过期
客户端调用登出接口,传入token和refreshToken作为参数。在登出接口中将token和refreshToken分别存放到redis中,并使用其哈希值作为key,设置key的过期时间分别为token和refreshToken的有效时间长度。
客户端请求接口时验证token
如果被访问的接口需要认证,这里分两步。首先,Identityserver4自动验证token是否有效。如果此步骤验证通过(以往这样的token合法了)。接着接着到redis黑名单库去查找强制登出的token,如果找到数据,判断该token为无效,也返回401。
验证refreshToken
强制登出的token对应的refreshToken也被视为登出。所以调用刷新token接口时候也需要验证refreshToken是否登出。
具体过程如下:客户端在请求刷新token接口时传入refreshToken作为参数,然后到redis黑名单库中去查找强制登出的refreshToken,如果找到数据,判断该refreshToken为无效,返回401,不去刷新token。