场景:
最近在做一个项目,用户登录后直接返回一个具有有效期的JWT,以后客户端在每次访问的时候,都在Http Header中携带这个Token用以验证用户信息。
问题:
由于服务器不保存 session 状态,因此无法在使用过程中废止某个 token。那么实现主动注销、强制登出、忘记密码、修改密码等方面功能的时候就很麻烦了。
现在想到的方案有
可能的解决方案:
将Token存入DB(MySQL、Redis)中,比如说用户需要登出的话,将DB中的Token删除,那么下次用户再访问的时候,先去查询DB中是否存在用户相关的Token,从而判断是否用户是否已登录。
只让前端处理,用户登出的话,前端删除存储的Token。但是这个Token在未过期之前,依然可用。
做一个黑名单,用户选择退出登录后,将Token放入黑名单中,每次有请求过来时都校验Token是否在黑名单中,且定期清理黑名单。
疑惑:
但是上述方案除了只让前端处理外,让无状态的JWT变成有状态,跟使用session差不多了。不知道老师在这方面有没有研究?如果是老师的话,老师会怎么处理这个问题?谢谢老师
登录后可查看更多问答,登录/注册