[jwt鑒權機製|青训营笔记]

78 阅读2分钟

JWT(JSON Web Token),本質就是一個字符串書寫規范,如下圖,作用就是在用來用戶和服務器之間傳遞安全可靠的信息。

  在目前前後端分離的開發過程中,使用token鑒權機制用於身份驗證是最常見的方案,流程如下:

  服務器當驗證用戶賬號和密碼正確的時候,給用戶頒發一個令牌,這個令牌作為後續用戶訪問一些接口的憑證。

  後續訪問會根據這個令牌判斷用戶是否有權限進行訪問。

  Token分為三部分,頭部(header)、載荷(Payload)、簽名(Signature),並以.進行拼接。其中頭部和載荷都是以JSON格式存放數據,只是進行了編碼。

  Header,每個JWT都會帶有頭部信息,這裡主要聲明使用的算法。聲明算法的字段名為alg,同時還有一個typ的字段,默認為JWT即可,以下示例中算法HS256。

  {  "alg": "HS256",  "typ": "JWT" } 

  因為JWT是字符串,所以我們還需要對以上內容進行Base64編碼,編碼後的字符串如下:

  eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9 
  payload,載荷即消息體,這裡會存放實際的內容,也就是Token的數據聲明,例如用戶的id和name,默認情況下也會攜帶令牌的簽發時間iat,通過還可以設置過期時間,如下:
  {

  "sub": "1234567890",

  "name": "John Doe",

  "iat": 1516239022

}

  同樣進行Base64編碼後,字符串如下:
 eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ
  Signature,簽名是對頭部和載荷內容進行簽名,一般情況,設置一個secretKey,對前兩個的結果進行HMACSHA25算法,公式如下:

Signature = HMACSHA256(base64Url(header)+.+base64Url(payload),secretKey)

  如何實現?Token的生成分為兩個部分:生成token,登錄成功的時候,頒發token。驗證token,訪問某些資源或者接口的時候,驗證token。