JWT基礎概念詳解
JWT介紹
之前我們文章講過分布式session如何存盤,其中就講到過Token、JWT,首先,我們來回顧一下使用Token進行身份認證,
- 客戶端發送登錄請求到服務器
- 服務器在用戶登錄成功之后會生成一個token,此時這個token可能會被存盤到資料庫、Redis等,實作可以共享,服務端會把生成的token回傳給客戶端
- 客戶端也會存盤這個token,每次請求需要攜帶這個token即可,
JWT是token的另一種方式,又有很多不同點,JWT全稱是JSON Web Token,它的本質是一個字串,它里面包含資料和簽名,接下來我們看看JWT是如何進行身份認證的,
- 客戶端發送登錄請求到服務器
- 服務器在用戶登錄成功之后簽發一個JWT Token,之后會把這個token直接回傳給客戶端,此時服務器端是不存盤任何用戶資訊的,
- 客戶端存盤JWT Token,每次請求時攜帶這個token
- 服務端在每次請求前,檢查傳過來的token,判斷簽名、過期時間,驗證通過后可以決議出token里面包含的用戶資訊,
JWT組成
JWT主要由3部分組成,分別是Header、payload、signature,下面我們具體講講每部分的作用,
Header
Header主要存盤token型別和簽名演算法相關資訊,例如
{
"alg": "HS256",
"typ": "JWT"
}
然后會把這個json字串使用Base64進行編碼,作為JWT的Header部分,
Payload
Payload主要是存盤資訊的,里面可以存盤業務資料或者用戶資訊, JWT有以下7個默認欄位可以選用,
- iss: Issure JWT簽發方
- iat: Issued at time JWT簽發時間
- sub: Subject JWT主題
- aud: Audience JWT接收方
- exp: Expiration time JWT過期時間
- nbf: Not before time JWT生效時間
- jti: JWT ID
下面我們舉個例子
{
"sub": "123456",
"username": "admin"
}
上面的json字串會使用Base64進行編碼,作為JWT的Payload部分,Payload部分默認是不加密的,所以一定不要把隱私資訊放在Payload當中,
Signature
Signature是對上面兩部分的資料的簽名,對上面的Header和Payload資料,通過指定的演算法生成Hash,防止資料被篡改,下面是簽名的計算公式
HMACSHA256(base64UrkEncode(header) + "." + base64UrlEncode(payload), secret)
在計算出簽名后,將上述的Header、Payload和Signature連接成一個字串,中間使用"."進行分隔,這個就是最終的JWT,
JWT和Token區別
- Token需要查詢進行驗證,JWT不需要,可以直接進行校驗,
- Token需要存盤在服務器端,JWT在服務器端不存盤任何資訊,
- Token可以在服務器端進行管理用戶,例如登出、禁用,JWT不可以,JWT依賴客戶端洗掉本地的JWT Token,
原文鏈接:https://monkey.blog.xpyvip.top/archives/jwt-ji-chu-gai-nian-xiang-jie
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/518947.html
標籤:其他
上一篇:面向物件
