服務安全之:JWT

JWT是JSON Web Tokens的縮寫。既然叫JSON Web Tokens,因此JWT Tokens中真正包含的是多個JSON對象。爲何是多個JSON對象呢?由於SWT Token其實是由三部分組成,其中有兩部分是JSON格式。這三部分即頭(Header)、負載數據(Payload)、簽名(Signature)。html

一、信息頭(Header)
頭信息包含兩部分,一部分表示Token的類型,對於JWT來講,值爲JWT;另外一部分表示簽名算法,如,HMAC、SHA25六、RSA。示例以下:算法

jwt-1.png

二、負載信息(Payload)
負載信息是對實體與附加信息的說明。包含註冊聲明、公開聲明、私有聲明三部分。詳情請參考:https://tools.ietf.org/html/rfc7519#section-4.2安全

三、簽名(Signature)
經過指定的算法將頭、負載、密碼信息做爲輸入條件,計算而得的一個字符串。服務器

這三部分信息不是原文傳輸的。在傳輸之前,先要進行轉碼壓縮。這樣作一是爲了使傳輸的token數據體積小,減小數據傳輸的負擔,二是爲了使數據更安全。JWT Token通常能夠採用HMAC算法使用密碼進行轉碼壓縮,或採用RSA或ECDSA使用公鑰/私鑰對進行轉碼。這兩種算法均具備數字簽名的做用,從而可以保證數據的完整性,防止數據被第三方篡改。編碼

JSON格式的頭信息和負載信息通常先要進行Base64編碼轉化。而後經過如下的算法得到簽名:
jwt-2.pngspa

假定頭信息Base64編碼轉化後的字符用h表示,Base64編碼轉化後的負載數據信息用p表示,簽名值用s表示,則JWT Token顯示爲一串用逗號分隔的字符串,通常有以下的形式:code

hhhhh.ppppp.sssss

JWT最經常使用的應用場景是爲用戶受權。用戶在登陸時,從受權服務器拿到JWT Token,後續的用戶請求只要攜帶此Token請求相應的資源或服務便可。服務端會在拿到用戶傳的Token後,進行合法性驗證。
JWT另外一個用途就是進行信息交換。因爲JWT Token既能夠用於承載數據,又是通過簽名的,因此,既能夠包含更多的應用相關信息,又能夠保證數據的安全性,防止數據被攔截後修改。jwt

更詳細的介紹,請參考官方說明:https://jwt.io/introduction/htm

相關文章
相關標籤/搜索