关键词知悉
会话:当打开浏览器并访问Web服务器上的资源时,就会建立一个会话。一个会话包括多次请求和响应。例如,登录教学系统会发起一次请求并得到响应,查询课程也会发起一次请求并得到响应。
会话跟踪:服务器识别多个请求是否来自同一浏览器的过程,目的是在同一会话中的多次请求之间共享数据,例如获取验证码并校对获取过的验证码(两个请求)。
HTTP无状态:每个请求都是独立的,没有相互关联,无法共享数据。解决方法是使用会话跟踪。
跟踪方案:
Cookie, 不能进行跨域请求,可以被用户禁用,不够安全。
Session,在服务器集群中无法直接共享。
JWT 令牌,需要自行实现,无法伪造
JWT令牌
本质上是一个字符串,它定义了一种简洁且自包含的格式,用于在通信双方之间以JSON数据格式安全传输信息。令牌由以下三个部分组成:
eyJhbGciOiJIUzI1NiJ9.
eyJuYW1lIjoiam9pbiIsImlkIjoxLCJleHAiOjE3MjUwNjc5NjJ9.
3GoCTzD_Hd0hp5E1snA8Dta2UTytTNyH7GrP78Z_5kU
Header(头部):记录签名类型及所用的签名算法,例如:{"alg":"HS256","typ":"JWT"}。
Payload(有效载荷):包含自定义信息以及默认信息,如:{"id":1,"name":"张三"}。
Signature(签名):为了防止令牌被篡改,结合header和payload以及一个指定的密钥,通过特定算法生成。
应用场景举例:用于登录认证。
用户成功登录后,系统将生成一个令牌。此后,每个请求都需要附带该jwt令牌,并且系统会在处理每个请求之前进行拦截验证。
基于springboot使用JWT令牌
在pom文件中引入jwt依赖: