首页 > 图灵资讯 > java面试题>正文

JWT的数据结构

2024-06-05 13:15:35

JWT总共包含了三个部分:Header头部、Payload负载、Signature签名。这三部分共同生成Token,三部分之间用“.”做分割。

JWT 头部

JWT的头部是一个描述JWT元数据的JSON对象,如下所示:

 

{
"alg": "HS256",
"typ": "JWT"
}


其中的alg:表示的是签名使用的算法,默认为HMAC SHA256(写为HS256),typ:表示的是令牌的类型,JWT的令牌统一写为JWT。

这样的一个Json数据,还需要使用Base64 URL算法将其转为字符串保存。

JWT 负载

负载部分就是JWT的主体内容,同样的也是一个Json对象,它包含了需要传递的数据,但是不能传递敏感数据,因为这部分数据别人也是可以拿到并且解密的。

JWT指定有七个默认字段供选择:

1iss:发行人

2exp:到期时间

3sub:主题

4aud:用户

5nbf:在此之前不可用

6iat:发布时间

7jti:JWT ID 用于标识该 JWT

除了默认字段外,我们还可以自定义字段,如下所示:

同样,这部分数据依然是使用Base 64 URL算法转换为字符串加密。

JWT 签名

签名部分是对上面两部分的数据签名,通过指定的算法(在JWT头部指定的算法)生成哈希来确保数据不会被篡改。

一般流程如下:

1.在服务器中保存了一个密码(secret),这个密码仅仅保存在服务器中,不对用户开放。

2.使用JWT头部指定的签名算法以及服务器中保存的密码(secret)来生成对应的签名

3.在计算出签名之后,JWT头、负载、签名,三部分组成一个字符串,每个部分以“.”进行分割,构成JWT对象

上一篇 JWT的面世
下一篇 JWT的认证流程

文章素材均来源于网络,如有侵权,请联系管理员删除。