JWT 簡 介

JSON 數據庫 算法 cherrycoding 2019-05-15

##什麼是JWT

這篇文章選擇性翻譯於https://jwt.io/introduction/

JSON Web Token(JWT)是一種開放標準(RFC 7519),它定義了一種緊湊且字自包含的標準,用於將各方之間的信息地傳輸為JSON對象。 該信息是通過數字簽名進行驗證。使用HMAC算法或使用RSA的公鑰/私鑰對JWT進行簽名,所以它的安全性非常高。

進一步解釋它的特點或者概念: •緊湊型(compact):由於是加密後的字符串,JWT數據體積非常的小,可通過 POST參數或HTTP請求頭髮送。 另外,數據體積小意味著傳輸速度很快。 •自包含(self-contained):JWT包含了用戶的所有信心,所以避免了每次查詢數據庫,降低了服務器的負載。

JWT應用場景

一般什麼時候應該使用JWT呢?,一般使用在以下場景:

•驗證:這是使用JWT的最常見的場景。 一旦用戶登錄,每個後續請求將包括JWT,允許用戶訪問該令牌允許的路由,服務和資源。 單點登錄是一個廣泛使用JWT的功能,因為它的開銷很小,並且能夠在不同的域中輕鬆使用。 •信息交換:JWT是在各方之間安全傳輸信息的好方法,因為它們可以被簽名,例如使用公鑰/私鑰對. 另外,當使用標題和有效載荷計算簽名時,還可以驗證內容是否未被篡改。

JWT結構

JWT由三個部分組成,分別為“.”分隔,三部分組成如下:

  • Header(頭)
  • Payload(有效載荷)
  • Signature(簽名) 因此,JWT通常格式如下:

xxxxx.yyyyy.zzzzz

現在,依次對這三個組成部分,分開講解:

1.Header

標題通常由兩部分組成:令牌的類型,即JWT,以及使用的哈希算法,如HMAC SHA256或RSA。 比如:

{
“alg”:“HS256”,
“typ”:“JWT”
}

將header進行Base64 編碼作為JWT的第一部分。

2.Payload

這是JWT的第二部分,包含了用戶的一些信息和Cliam(聲明、權利),有三種類型的Cliam:保留,公開和私人聲明。 一個典型的payload應該如下:

{
"sub": "1234567890",
"name": "John Doe",
"admin": true
}

將payload進行Base64 編碼作為JWT的第二部分。

3.Signature

要創建簽名部分,需要使用到用Base64編碼後header和payloader,以及祕鑰,將它們簽名,一個典型的格式如下: 
HMACSHA256(
base64UrlEncode(header) + "." +
base64UrlEncode(payload),
secret)

JWT是如何使用的

JWT 簡 介

來說下最常見的應用場景,即認證方面,如圖所示。客戶端通過用戶名密碼向服務器請求獲取某用戶的信息,包括用戶一些額外信息,比如權限,這些信息經過加密以JWT形式返回。獲取到該JWT的客戶端,在以後的每次請求中,都需要攜帶該JWT,這樣做的好處就是每次不需要查詢數據庫獲取該用戶的信息,在微服務這樣的分佈式系統中,可以實現單點登錄。

相關推薦

推薦中...