数据构成
JWT = Bearer {Header}.{Payload}.{Signature}
Header:头部
Payload:负载
Signature:签名
Header部分(使用Base64URL编码)
{
"alg": "HS256", //表示签名的算法(algorithm),默认是 HMAC SHA256(写成 HS256)
"typ": "JWT" //表示这个令牌(token)的类型(type),JWT 令牌统一写为JWT
}
Payload部分(使用Base64URL编码)
- 7个官方字段:
iss (issuer):签发人
exp (expiration time):过期时间
sub (subject):主题
aud (audience):受众
nbf (Not Before):生效时间
iat (Issued At):签发时间
jti (JWT ID):编号
- 也可以自定义字段:
{
"sub": "1234567890",
"name": "John Doe",
"admin": true
}
Signature部分
- Signature 部分是对前两部分的签名,防止数据篡改。
首先,需要指定一个密钥(secret)。这个密钥只有服务器才知道,不能泄露给用户。然后,使用 Header 里面指定的签名算法(默认是 HMAC SHA256),按照下面的公式产生签名:
HMACSHA256( base64UrlEncode(header) + "." + base64UrlEncode(payload), secret)