json中用到的token


JSON Web Token (JWT)是一個開放標准(RFC 7519)。

用於JSON對象在各個層之間安全地傳輸信息。該信息可以被驗證和信任,通過數字簽名。

應用場景:
    Authorization (授權) : 這是使用JWT的最常見場景。一旦用戶登錄,后續每個請求都將包含JWT,允許用戶訪問該令牌允許的路由、服務和資源。單點登錄是現在廣泛使用的JWT的一個特性,因為它的開銷很小,並且可以輕松地跨域使用。
    Information Exchange (信息交換) : 對於安全的在各方之間傳輸信息而言,JSON Web Tokens無疑是一種很好的方式。因為JWTs可以被簽名,例如,用公鑰/私鑰對,你可以確定發送人就是它們所說的那個人。另外,由於簽名是使用頭和有效負載計算的,您還可以驗證內容沒有被篡改。

 

JSON Web Token由三部分組成,它們之間用圓點(.)連接。這三部分分別是:

 Header Payload Signature

典型的JWT樣子:xxxxx.yyyyy.zzzzz
Header:

header典型的由兩部分組成:
  1-token的類型(“JWT”)和
  2-算法名稱(比如:HMAC SHA256或者RSA等等)
如:
{
"typ":"JWT",
"alg":"HS256"
}
最后用Base64對這個JSON編碼就得到JWT的第一部分xxxxx.yyyyy.zzzzz
payload 
聲明有三種類型: registered, public 和 private。
  • Registered claims : 這里有一組預定義的聲明,它們不是強制的,但是推薦。比如:iss (issuer), exp (expiration time), sub (subject), aud (audience)等。
  • Public claims : 可以隨意定義。
  • Private claims : 用於在同意使用它們的各方之間共享信息,並且不是注冊的或公開的聲明。
例如:
{ “iss”: “發行者”, “sub”: 主題”, “aud”: “觀眾”, “exp”:”過期時間”, “iat”:”簽發時間” 以下可以添加自定義數據 “id”:”1”, “nickname”:”昵稱” } 根據JWT claim set[用base64]加密得到的。claim set是一個json數據,是表明用戶身份的數據,可自行指定字段很靈活,也有固定字段表示特定含義(但不一定要包含特定字段,只是推薦)。 Base64算法是可逆的,不可以在載荷部分保存用戶密碼等敏感信息。如果業務需要,也可以采用對稱密鑰加密。

對payload進行Base64編碼就得到JWT的第二部分xxxxx.yyyyy.zzzzz

簽名部分signature 
HMACSHA256(Base64(Header) + “.” + Base64(Payload), secret),secret是加密的key。
簽名的目的是用來驗證頭部和載荷是否被非法篡改。 
驗簽過程描述:獲取token值,讀取Header部分並Base64解碼,得到簽名算法。根據以上方法算出簽名,如果簽名信息不一致,說明是非法的。

工作原理:

JSON Web Token工作原理

    初次登錄:用戶初次登錄,輸入用戶名密碼

    密碼驗證:服務器從數據庫取出用戶名和密碼進行驗證

    生成JWT:服務器端驗證通過,根據從數據庫返回的信息,以及預設規則,生成JWT

    返還JWT:服務器的將token放在cookie中將JWT返還

    帶JWT的請求:以后客戶端發起請求,帶上cookie中的token信息。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM