session-cookie原理:
- 用户发送用户名密码给服务器
- 服务器检验通过后通过uuid或其他生成一个随机字符串作为sessionId,以该sessionId作为主键,内容为session详细数据,保存在服务器。可以保存在redis、单机session、数据库等地方。
- 把sessionId回传给浏览器,放在cookie中。
- 浏览器访问时,把sessionId提交给服务器,服务器根据sessionId查询到详细的session信息。
JWT原理:
- 用户发送用户名密码给服务器
- 服务器检验通过后生成Json格式的token信息,token信息包括JWT头(header), 有效载荷(payload), 签证(signature) .3部分之间用“.”号做分隔。
- 该json数据经过加密之后直接发送给浏览器,因为JWT是为了跨域访问设计的,所以token一般存在Header Authorization中,服务器不保存。
- 服务器收到前端发来的token之后,进行验证,验证通过则放行。
JWT缺点:
- JWT的最大缺点是服务器不保存会话状态,所以在使用期间不可能取消令牌或更改令牌的权限。也就是说,一旦JWT签发,在有效期内将会一直有效。
- JWT本身包含认证信息,因此一旦信息泄露,任何人都可以获得令牌的所有权限。为了减少盗用,JWT的有效期不宜设置太长。对于某些重要操作,用户在使用时应该每次都进行进行身份验证。
- 为了减少盗用和窃取,JWT不建议使用HTTP协议来传输代码,而是使用加密的HTTPS协议进行传输。
- 对于用户手动注销需要额外的过期处理,如黑名单。
总结:
JWT除了减少查database之外,其它任何问题都没有解决。还有需要额外CPU计算,难过期处理等难点,不建议使用JWT。