Java的JSON Web令牌
一、什麼是JWT
JWT是一種以緊湊,可驗證的形式在兩方之間傳輸信息的方法
在JWT主體中編碼的信息位稱爲 claims。JWT的拓展形式爲 JSON格式,因此每個 claim 都是JSON 對象中的鍵
JWT 可以被加密簽名(使其成爲JWS)或被加密(使其成爲JWE)
這爲JWT的用戶增加了一層強大的可驗證性。接收者具有高度的信心,例如可以通過驗證簽名來篡改JWT。
二、JWT的組成形式
簽名的 JWT的緊湊形式是一個字符串,該字符串包含三個部分,每個部分中間都有一個 .
eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJKb2UifQ.ipevRNuRP6HflG8cFKnmUPtypruRC4fb1DWtoLL62SY
每個部分都是Base64URL 編碼 的。整體分爲三個部分:
- 標頭 :至少指定用於簽署 JWT的算法
- 正文:這個部分包含了此JWT的所有聲明
- 簽名 :通過標頭和正文的組合,通過標頭中指定的算法傳遞來計算的
如果將前兩部分通過基本的64位url解碼器傳遞,則會得到以下內容(爲清楚起見添加了格式):
header:
{
"alg":"HS256"
}
body:
{
"sub":"Joe"
}
在這種情況下,我們得到的信息是使用 SHA-256算法的HMAC被用來對 JWT進行簽名。而且,主體具有 sub價值的單一主張 Joe
要計算簽名,需要一個密鑰對其進行簽名。