什么是JWT?
集成与应用
问题
JWT使用起来超级简单方便对不对,但它对于整体应用存在一个设计缺陷,那就是服务端无法主动失效token,什么意思呢?就是如果我再次登录(可能是别的客户端)获取到新的token,之前的token是不失效(两个客户端可以同时登录),还可以再使用获取服务资源。所以JWT在某个方面安全性上不及session。
如果要让服务端能够主动失效token,就要在服务端维持token状态,这又回到有状态的token机制,这与JWT目前的应用机制是相勃的。所以在经常需要验证的场景中,建议使用redis来管理一个token的状态,key可以是用户ID,value可以是token,这里的token没必要使用JWT了,可以自己来实现。其次是使用session,此处不做讨论。