jwt组成结构

5,244 阅读1分钟

什么是JWT

JWT(JSON WEB TOKEN)是通信双方之间以 JSON对象的形式安全传递信息的方法。

其实可以理解为使用非对称算法来进行前后端校验。

JWT 的组成

JWT 由三部分组成

头部-Header

# alg是签名算法,默认是HS256,
# typ是token类型,一般JWT默认为JWT
{
    "alg": "HS256",
    "typ": "JWT"
}

然后按照此规则将头部信息进行base64编码,构成JWT第一部分

载荷-payload

payload 就是存放有效信息的地方

{
    "key0": "value0",
    "key1": "value1"
}

payload 中有一些参数字段是建议使用的 (仅列出几个)

参数含义
iatjwt的签发时间
expjwt的过期时间,这个过期时间必须要大于签发时间
nbf定义在什么时间之前,该jwt都是不可用的

JWT规定了7个官方字段:

  • iss(issuer):签发人
  • exp (expiration time):过期时间
  • sub (subject):主题
  • aud (audience):受众
  • nbf (Not Before):生效时间
  • iat (Issued At):签发时间
  • jti (JWT ID):编号

比如来定义一个payload

{
  "exp": Math.floor(Date.now() / 1000) + (60 * 60),
  "name": "John Doe"
}

payload 会进行base64编码,构成JWT第二部分

签证-Singnature

Signature 部分是对前两部分的签名,防止数据篡改。

需要指定一个密钥(secret)。这个密钥只有服务器才知道,不能泄露给用户。然后,使用 Header 里面指定的签名算法(默认是 HMAC SHA256)。

let encodedString = base64UrlEncode(header) + '.' + base64UrlEncode(payload);
let secret = "秘钥";
let singnature = HMACSHA256(encodedString, secret);

signature 是JWT的第三部分

将以上三部分拼接起来(中间用.分隔),就是最后的JWT