Cookie、Session、Token、JWT都是啥
参考B站视频链接
用户在浏览器进行登录时,浏览器会将用户名和密码发送给服务器,服务器查询后确定是哪个用户发送的登录请求。但用户登录之后还会有其它的请求,如果每次请求都带上账号密码,容易导致密码泄露。
所以服务器会返回一些标记信息,浏览器收到这些标记信息之后,会保存在Cookie中,每次发送请求就带上,这样就能区分用户,实现了记住登录状态。Cookie的保存和发送是由浏览器自动实现的。
虽然cookie信息中并没有密码,但是这些标记信息如果被恶意的人拿到就也会得相同的用户权限,所以可以使用数据签名的方式来作为cookie(会拼接上服务器的密令),后面进行请求时,服务器就可以通过验证签名来判断数据是否合法。
Cookie是保存在浏览器上的,如果我们不想在浏览器中保存太多的数据,可以把数据保存在服务器中,然后生成一个足够长的key与数据关联,key返回到浏览器写入Cookie中。这个过程是Session,key是SessionID,Session本质上还是Cookie。
而APP、小程序这些客户端的网络请求接口默认没有Cookie机制。所以返回的是Token,类似于SessionID,但是没有浏览器的cookie机制。使用Authorization字段。
Session和Cookie的数据都是存储在服务器当中,如果是分布式服务器就会出现某些服务器没有会话数据导致鉴权失败的情况,解决问题可以在服务器中假设一个中心化的存储服务,例如redis来专门存储会话数据(但是如果中心化服务器发生故障就会导致所有服务器连带故障)
所以如果还是由客户端来保管会话数据,所以采用JWT来统一标准生成Token.
JWT分为三部分:
Header(头部):Hash算法和Token类型
Payload(载体):需要携带的会话数据
Verify signature(签名):与Cookie签名类似