jwt与token+redis
jwt与token+redis,哪种方案更好用?
jwt是去中心化无状态,token是中心化的,
去中心化的核心是“自解释(验证)”, 适合调用非常频繁或者网络环境复杂的场景。
用人话说,就是适合服务化,或者复杂的内外网穿透环境。
token这样中心化的验证方式,你首先要保证每个服务节点都能访问到这个验证中心,这一点在很多时候是做不到的,甚至根本就找不到验证中心的地址是什么。比如跨多个子网的场景,你这个中心验证服务的地址除非是公网,否则根本就无法访问。还有就是现在的微服务场景,一次c端的调用,可能设计几十上百次的内部服务调用,你每次都去调用一次验证中心,这个效率太低了。
jwt这类是自验证的,由ca签发一次秘钥后,就不需要额外的验证中心,正好可以避免上面提到的那些缺陷。当然,他是不可变验证,签发后就不可更改或撤销,那些所谓的“撤销”只是让单一的使用方不认,并不是撤销的jwt本身。实际上,这就需要在签发的时候,预估有效期。类似的场景很多,比如我们的身份证,就是去中心化的验证,在有效期内无法撤销。除非你用专业的工具读取内部芯片信息然后去中心化服务器验证一次。但这只是在当前这个场景无效,你换个场景可能继续使用。
再举个例子,早些时候,Let's Encrypt的证书在Safari浏览器上非常慢,那是因为Safari每次都会去OCSP服务器验证下这个证书的状态,增加了不必要的消耗,尤其是这个OCSP因为众所周知的原因,访问并不可靠。解决办法就是OCSP Stapling,服务器缓存证书的状态信息,把这些信息随着证书一起下发给使用方,在缓存期内,就不需要重复验证。
所以,jwt和token session哪个更好呢?这要看使用场景,对于C端产品,token session更好,安全性高。对于验证非常频繁,网络非常复杂的场景,jwt这类自验证的方式是唯一选择。
作者:tiyee
链接:https://www.zhihu.com/question/274566992/answer/3455266507
- 感谢你赐予我前进的力量