帶你瞭解JWT

什麼是JWT

    JWT就是Json web token ,JWT是一種基於Json的開放標準(RFC 7519)。
    是爲了在網絡應用環境中傳遞而聲明的標準
    定義了一種緊湊安全的JSON對象,且存在數字簽名,是安全的
    是一種用於通信雙方之間傳遞安全信息的簡潔的、URL安全的表述性聲明規範,經常用在跨域身份驗證。

認證方式

在JWT之前,我們用過Sssion來進行認證,也使用過Token認證。那麼這兩種認證是怎麼來實現的呢?

我們都是知道,在http協議是一種無狀態的協議,所以當用戶提供登錄信息進行登錄認證後,第二次在進行請求時,用戶必須再次進行認證纔行,因爲http是無狀態的,所以不知道用戶的請求。

Session認證

所以爲了知道用戶的請求,我們必須在服務器存儲一份用戶的信息,這個用戶信息在響應時會返回給瀏覽器,讓其存入cookie中,下次請求帶上,服務器就知道是那個用戶的請求了,這就是session認證。
  
  每個用戶在認證後,都會在服務端做一次記錄,通常session都是保存在內存中,所以用戶增加時,服務器的開銷也意味着增大。
  
  而用戶認證後,服務段做了記錄,如果記錄在內存中存儲,就意味用戶下次請求也必須在這臺服務器上纔可以拿到認證信息,如果在分佈式應用中,會限制負載均衡,也就限制了應用的擴展能力。
  session認證流程

Token認證

token也是無狀態的,他是再認證之後生成一份token,這份token保留字在用戶手中,當用戶需要認真的時候,將token給予服務器,服務器來驗證這個tokn,來檢查token是否合法。
token認證流程

JWT認證

JWT簡述

客戶端在認證後,服務器會生成帶有簽名的JWT數據,返回給客戶端,客戶端將JWT數據保留起來,在以後的請求中將JWT數據和請求內容一起發給服務器,服務器對JWT數據進行驗證,驗證不通過則不返回數據。JWT在服務端不會保存任何信息。服務容易擴展

JWT構成

JWT由三部分構成,它們之間用圓點(.)連接。分別是:

  • Header(頭部)

  • Payload(載荷)

  • Signature(簽證)

       第一部分我們稱它爲頭部(header)
       第二部分我們稱其爲載荷(payload,類似貨車上承載的貨物)
       第三部分是簽證(signature)
       因此標準格式就是: hhhhhh.pppppppp.ssssss
    

頭部(Header)

頭部是對JWT基本信息的描述。由兩個經典部分組成,一個是類型,一個是簽名算法(HMAC SHA256或者RSA等等)。
例如:

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

然後將頭部的Json進行base64加密(該加密是可以對稱解密的),構成了第一部分.

eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9 (加密後的值)

載荷(playload)

playload是JWT的第二部分,它存放了有效的信息,這些信息也是由三部分構成

  • 標準中註冊的聲明
  • 公共的聲明
  • 私有的聲明
標準中註冊的聲明 (建議但不強制使用)
  • iss: jwt簽發者
  • sub: jwt所面向的用戶
  • aud: 接收jwt的一方
  • exp: jwt的過期時間,這個過期時間必須要大於簽發時間
  • nbf: 定義在什麼時間之前,該jwt都是不可用的.
  • iat: jwt的簽發時間
  • jti: jwt的唯一身份標識,主要用來作爲一次性token,從而回避重放攻擊。
公共的聲明

公共的聲明可以添加任何的信息,一般添加用戶的相關信息或其他業務需要的必要信息.但不建議添加敏感信息,因爲該部分在客戶端可解密.

私有的聲明

私有聲明是提供者和消費者所共同定義的聲明,一般不建議存放敏感信息,因爲base64是對稱解密的,意味着該部分信息可以歸類爲明文信息。

playload例如:

{
“sub”: ‘123456789’,
“name”: ‘test’,
“admin”:true
}

然後將其進行base64加密,得到Jwt的第二部分。

  eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9

簽證(signature)

JWT的第三部分是一個簽證信息,信息由三個部分組成,header (base64後的),payload (base64後的),secret(鹽值),爲了得到簽名部分,你必須有編碼後的header、payload、鹽值,header中指定的算法,然對它們簽名即可。

JWT認證流程圖

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章