JWT数据结构(二)

一、JWT的数据结构:

形如 xxxxx.yyyyy.zzzzz 有三部分组成,每部分用英文句号连接

即:header(标头).payload(负载).signature(签名)

二、Header(标头部分)

   JWT第一部分,是一个JSON 对象, 描述JWT的元数据,通常如下所示。

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

表头的组成: 

  typ属性(type):令牌的类型,JWT 令牌统一写为JWT

  alg属性(algorithm):所使⽤的签名算法 如:HMAC、SHA256、RSA

最后,使用Base64 URL编码算法将上述JSON对象转换为字符串保存。

 

三、payload(负载部分)

  JWT第二部分,是一个JSON对象,描述一个声明数据,声明通常是用户有关实体对象或者其他数据。通常如下所示:

{
  "sub": "1234567890",
  "name": "John Doe",
  "iat": 1516239022
}

一般是在这个部分定义私有字段: 例如{"userId":"123456","userName":"jack","isAdim":"true"}

 其中payload官方规定了7个字段,如下:

  iss (issuer):发行人

  exp (expiration time):过期时间

  sub (subject):主题

  aud (audience):用户

  nbf (Not Before):生效时间(在此时间之前不可用)

  iat (Issued At):发布时间

  jti (JWT ID):编号(用户标识该JWT)

注意:JWT 默认是不加密的,任何人都可以解读其内容,所以不要把机密信息放在这个部分,以防信息泄露。 如:用户的密码就不能放在这里

最后,使用Base64 URL编码算法将上述JSON对象转换为字符串保存。

 

四、signature(签名部分)

  JWT的第三部分,是对前两部分进行签名(签名可以理解为:加盐),防止数据的篡改。通常如下所示:

 HMACSHA256 (base64Ur1Encode(header) + "." + base64Ur1Encode(payload) , secret);

 secret:密钥(密钥绝对⾃⼰保管好,签名值同样做Base64编码,该secret仅仅保存在后端服务器中,不能泄露给客户端)

 

Preventing data tampering
posted @ 2023-02-21 09:50  向大海  阅读(78)  评论(0编辑  收藏  举报