數(shù)據(jù)構(gòu)成
JWT = Bearer {Header}.{Payload}.{Signature}
Header:頭部
Payload:負(fù)載
Signature:簽名
Header部分(使用Base64URL編碼)
{
"alg": "HS256", //表示簽名的算法(algorithm)渗鬼,默認(rèn)是 HMAC SHA256(寫成 HS256)
"typ": "JWT" //表示這個(gè)令牌(token)的類型(type),JWT 令牌統(tǒng)一寫為JWT
}
Payload部分(使用Base64URL編碼)
- 7個(gè)官方字段:
iss (issuer):簽發(fā)人
exp (expiration time):過期時(shí)間
sub (subject):主題
aud (audience):受眾
nbf (Not Before):生效時(shí)間
iat (Issued At):簽發(fā)時(shí)間
jti (JWT ID):編號(hào)
- 也可以自定義字段:
{
"sub": "1234567890",
"name": "John Doe",
"admin": true
}
Signature部分
- Signature 部分是對(duì)前兩部分的簽名嘀趟,防止數(shù)據(jù)篡改垮兑。
首先宋列,需要指定一個(gè)密鑰(secret)煎谍。這個(gè)密鑰只有服務(wù)器才知道,不能泄露給用戶唧躲。然后咙好,使用 Header 里面指定的簽名算法(默認(rèn)是 HMAC SHA256)篡腌,按照下面的公式產(chǎn)生簽名:
HMACSHA256( base64UrlEncode(header) + "." + base64UrlEncode(payload), secret)