一分鐘簡單瞭解 JSON Web Token

JSON Web Token(JWT)是一個開放的標準(RFC 7519),它定義了一個緊湊且自包含的方式,用於在各方之間做爲 JSON 對象安全地傳輸信息。因爲此信息是通過數字簽名的,所以能夠被驗證和信任。java

今天咱們就來簡單的認識一下 JSON Web Token。算法

JWT 認證和 session認證的區別

首先須要說明 JSON Web Token 是能夠用於認證的,那麼就先來對比一下 JSON Web Token 認證和 傳統的 session 認證的區別,傳統的 session 認證是有狀態的,也就是說咱們須要在服務端保存用戶的認證信息,若是服務端從新或者換一臺服務器,那麼這個認證就失效了,而且傳統的 session 的認證方式擴展起來不是那麼的容易。安全

基於 JSON Web Token 的鑑權機制相似於 http 協議,是一種無狀態的,服務器不須要保存用戶的認證信息或者會話信息,這也就意味着 JWT 認證機制的應用不須要去考慮用戶在哪一臺服務器登陸了,這就爲應用的擴展提供了便利,也是因爲這個特性,JWT 在微服務架構中應用普遍。服務器

JSON Web Token 的組成

一個 JSON Web Token 實際上就是一個字符串,它由三部分組成:頭部、載荷與簽名,以下圖所示:微信

一、頭部(header )

頭部用於描述關於該 JSON Web Token 的最基本的信息,例如其類型以及簽名所用的算法等,一般以下所示:session

{
    "alg": "HS256",
    "typ": "JWT"
}
  • alg屬性:表示簽名使用的算法,默認爲HMAC SHA256(寫爲HS256)
  • typ屬性:表示令牌的類型,JWT令牌統一寫爲JWT

頭部通常使用 base64 加密,加密後密文:eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9架構

二、載荷(payload)

載荷是 JSON Web Token 的主體內容部分,裏面存放一些有效信息,JSON Web Token 標準定義中定義瞭如下 5 個字段:微服務

  • iss: 該JWT的簽發者
  • sub: 該JWT所面向的用戶
  • aud: 接收該JWT的一方
  • exp(expires): 何時過時,這裏是一個Unix時間戳
  • iat(issued at): 在何時簽發的

除了標準定義中的字段外,咱們還能夠自定義字段,好比在 JWT 中,咱們的載荷信息可能以下:學習

{
    "sub": "1234567890",
    "name": "pingtouge",
    "admin": true
}

咱們須要注意,在默認狀況下 JWT 是未加密的,每個人均可以讀取其內容,所以在載荷中,不要存放私密信息,防止信息泄露。編碼

三、簽名(signature)

簽名是 JSON Web Token 中比較重要的一部分,前面兩部分都是使用 Base64 進行編碼的,signature 須要使用編碼後的 header 和 payload 以及咱們提供的一個密鑰,而後使用 header 中指定的簽名算法(HS256)進行簽名,簽名的做用是保證 JWT 沒有被篡改過。

爲何須要簽名?

對於加密算法來講,碰撞機率仍是比較小的,通常而言,不一樣的輸入加密後的輸出是不同的,不一樣輸入產生相同結果的機率仍是至關小的,因此能夠利用加密算法的這個特性來判斷 JWT 是否被篡改過。

假若有人篡改了載荷中的信息,再進行編碼的話,那麼新的頭部和載荷的簽名跟以前的簽名是不同的,而且如何加密的密鑰不同的話,得出來的簽名結果也會不同。

JWT使用場景

  • Authentication(鑑權)

這是使用JWT最多見的狀況。 一旦用戶登陸,每一個後續請求都將包含JWT,容許用戶訪問該令牌容許的路由,服務和資源。 單點登陸是當今普遍使用JWT的一項功能,由於它的開銷很小,而且可以輕鬆地跨不一樣域使用。

  • Information Exchange(信息交換)

JSON Web Tokens是在各方之間安全傳輸信息的好方式。 由於JWT能夠簽名:例如使用公鑰/私鑰對,因此能夠肯定發件人是他們自稱的人。 此外,因爲使用標頭和有效載荷計算簽名,所以您還能夠驗證內容是否未被篡改。

以上就是 JSON Web Token 相關知識,但願這篇文章對您的學習或者工做有所幫助,若是您以爲文章有幫助,歡迎幫忙轉發,謝謝。

最後

目前互聯網上不少大佬都有 JSON Web Token 相關文章,若有雷同,請多多包涵了。原創不易,碼字不易,還但願你們多多支持。若文中有所錯誤之處,還望提出,謝謝。

歡迎掃碼關注微信公衆號:「互聯網平頭哥」,和平頭哥一塊兒學習,一塊兒進步。

互聯網平頭哥

相關文章
相關標籤/搜索