1、什么是JWT
JSON Web Tokens,是一种开发的行业标准规范RFC 7519。广泛的用在系统的认证和数据交换方面。
2、JWT结构
JWT 由三个部分依次组成
- Header(头部)
- Payload(载荷)
- Signature(签名)
2.1、Header
Header 部分是一个 JSON 对象,描述 JWT 的元数据,包含算法和token类型。
需要对json进行base64url加密
{
"alg": "HS256",
"typ": "JWT"
}
2.2、Payload
用来存放实际需要传递的数据。
需要json进行base64url加密
里面的前五个字段都是由JWT的标准所定义的,并且也支持自定义字段
iss: 该JWT的签发者
sub: 该JWT所面向的用户
aud: 接收该JWT的一方
exp(expires): 什么时候过期,这里是一个Unix时间戳
iat(issued at): 在什么时候签发的
#自定义字段
name:hello
2.3、Signature
把前两段的base密文通过·拼接起来,使用HS256加密
HMACSHA256(
base64UrlEncode(header) + "." +
base64UrlEncode(payload),
secret)
例如
eyJhbGciOiJIUzUxMiJ9.eyJleHAiOjE2MTQ2Puk_fv6cyfk0B1j7vbIqw_Q
3、JWT认证流程
- 客户端发送(用户名、密码)身份信息至服务器端;
- 服务器端对客户端发送身份信息进行校验,校验通过后,生成token字符串;
- 服务器端将生成的token字符串发送给客户端(服务器端不保存token);
- 客户端接收到token后,将token保存到cookie或者localstorage;
- 客户端每次向服务器端发送请求,携带token(通过header、cookie等方式);
- 服务器端收到请求,首先验证token是否合法过期(可通过拦截器方式),返回对应信息;
4、JWT认证和传统session认证区别
4.1、基于session的认证
http协议是一种无状态的协议,本身是无法对访问的客户端进行识别。
采用session机制,客户端在服务端登陆成功之后,服务端会生成一个sessionID,返回给客户端,客户端将sessionID保存到cookie中,再次发起请求的时候,携带cookie中的sessionID到服务端,服务端会缓存该session(会话),当客户端请求到来的时候,服务端就知道是哪个用户的请求,并将处理的结果返回给客户端。
存在问题:
- session保存在服务端,当客户访问量增加时,服务端就需要存储大量的session会话,对内存压力增大
- 分布式集群环境存在session共享问题
- CSRF攻击: 基于cookie来进行用户识别的, cookie如果被截获,用户就会很容易受到跨站请求伪造的攻击。
4.2、基于token的鉴权机制
基于token的鉴权机制类似于http协议也是无状态的,服务端不需要保存认证信息或者会话信息
5、JWT特点
跨域访问:基于Token的访问策略可以

最低0.47元/天 解锁文章
21万+

被折叠的 条评论
为什么被折叠?



