JWT令牌结构
JWT令牌由Header、Payload、Signature三部分組成,每部分中間使用點(.)分隔,比如:xxxxx.yyyyy.zzzzz
?
-
Header
頭部包括令牌的類型(即JWT)及使用的哈希算法(如HMAC、SHA256或RSA)。
一個例子:
{"alg": "HS256","typ": "JWT" }將上邊的內容使用Base64Url編碼,得到一個字符串就是JWT令牌的第一部分。
-
Payload
第二部分是負載,內容也是一個json對象,它是存放有效信息的地方,它可以存放jwt提供的現成字段,比如:iss(簽發者),exp(過期時間戳), sub(面向的用戶)等,也可自定義字段。此部分不建議存放敏感信息,因為此部分可以解碼還原原始內容。一個例子:
{"sub": "1234567890","name": "456","admin": true }最后將第二部分負載使用Base64Url編碼,得到一個字符串就是JWT令牌的第二部分。
-
Signature
第三部分是簽名,此部分用于防止jwt內容被篡改。這個部分使用base64url將前兩部分進行編碼,編碼后使用點(.)連接組成字符串,最后使用header中聲明簽名算法進行簽名。一個例子:
HMACSHA256( base64UrlEncode(header) + "." + base64UrlEncode(payload), secret)base64UrlEncode(header):jwt令牌的第一部分。base64UrlEncode(payload):jwt令牌的第二部分。secret:簽名所使用的密鑰。
下圖中包含一個生成的jwt令牌:
總結