JWT
简称
- 全称:JSON Web Token (JWT),(JSON Web Tokens - jwt.io)
- 定义了一种简洁的、包含式的格式、用于在通信双方以JSON数据格式安全传输信息。由于数字签名的存在,这些信息是可靠的。
组成
-
头部(Header):JWT的头部通常由两部分组成:令牌的类型(即JWT)和所使用的签名算法(如HMAC SHA256或RSA)。头部会被Base64编码,但不会进行加密。例如:{"alg":"HS256","type":"JWT"}
-
Base64编码是一种基于64个可打印字符(A-Z,a-z,0-9,+,/)来表示二进制数据的编码方式
-
-
载荷(Payload):载荷是JWT的第二部分,包含了一些声明(claims),用于描述关于用户和其他数据的信息。JWT的载荷可以包含预定义的声明(如iss(签发者)、exp(过期时间)等)和自定义的声明。载荷也会被Base64编码,但不会进行加密。
-
签名(Signature):签名是JWT的第三部分,用于验证JWT的完整性和真实性。签名是通过将头部、载荷和一个密钥进行加密生成的。(不是Base64进行编码的)服务器在接收到JWT后,使用相同的密钥和签名算法来验证签名,以确保JWT没有被篡改。
具体实例
```
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
```
在这个实例中,JWT令牌由三部分组成,每个部分之间使用点号(.)分隔:
1. 头部(Header):`eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9`,它包含了令牌的类型("alg")和使用的加密算法("typ")。
2. 载荷(Payload):`eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ`,它包含了一些声明(claims),例如用户ID、用户名和令牌的发放时间。
3. 签名(Signature):`SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c`,它由头部、载荷、秘钥和加密算法生成,用于验证令牌的真实性。
JWT令牌通常用于身份验证和授权,可以在客户端和服务器之间进行安全的数据传输。
使用场景
- 登录认证
- 我们从浏览器发送请求,请求登录操作,会访问登录的接口,如果登录成功,服务端需要生成一个JWT令牌(生成令牌),然后将生成的JWT令牌返回给前端,前端将JWT令牌存储起来,然后在后续的每一次请求中都会将JWt令牌携带到服务端,服务端进行统一拦截,进行判断(校验令牌)。