1 回顾Session
1.1 cookie-session会话机制(会话管理)
HTTP特点:无记忆性,请求响应式。HTTP的无记忆性会产生问题 客户端A\B都可以对服务器发起请求,但由于HTTP协议的无记忆性,服务器没办法记住客户端是谁。为了解决这个问题,引入了会话管理
客户端(browser浏览器)与服务器(server)之间的会话管理
会话管理的实现:
客户端A和服务器的第一次交互:
- 客户端A发起请求到服务器,比如需要一张图片
- 服务器收到请求,产生一个HttpSession对象(有一个唯一的ID值)
- 服务器存储这个HttpSession对象,在服务器中分配一定的空间
- 服务器产生一个cookie对象,将JSESSIONID存入cookie,并发送给客户端(浏览器),存储在浏览器。
客户端A和服务器的第n次交互:
- 客户端A发起请求到服务器,携带cookie对象的JSESSIONID
- 服务器检查到客户端A的JSESSIONID,不产生HttpSession对象
- 从现有的HttpSession对象中查找此ID。如果ID存在,指定session操作。 如果ID不存在,可能产生一个新的session
2 Session会话管理存在的问题
- 在实际情况下,服务器不止一台,但这几台服务器应当扮演同一个角色。如果客户端A和服务器A建立了关系,服务器A保存了session对象,但是服务器B并没有这个数据。如果客户端A在另一天的时候,访问的是服务器B,那么就找不到session对象。所以需要使得服务器同步,这是一件很麻烦的事。
- session存储数据大量存在于服务器中,对服务器的压力较大
总结:Session会话管理在多服务器中有局限性。 在多服务器时,可以选择使用JWT。
3 JWT的概念
JWT(JSON Web Token): 是一个开发的标准,用于在各方之间以JSON对象安全地传输信息。这些信息通过数字签名进行验证和授权。可以使用“RSA”的"公钥/私钥对"对JWT进行签名。
JWT的验证方式:
- 客户端输入账号和密码
- 服务器验证成功,使用私钥创建一个JWT(可想象成一个工牌,是独有的),返回给客户端
- 客户端再次访问服务器,将JWT串在请求中发送给服务器
- 服务器验证JWT
- 验证成功,读取资源。验证失败,拒绝访问。
优势:服务器只需要记住JWT(工牌)就行了,不需要记住很多东西
4 JWT的组成
4.1 header(头部)
加密算法:SHA-256
4.2 payload(载荷)
携带数据
audit:JWT的接收者
4.3 signature(签名)
签名配合载荷,组成唯一的数据。签名用来验证身份。
签名算法,使用密码签名
|