服務安全之:JWT

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

    

    1、信息頭(Header)

    頭信息包含兩部分,一部分表示Token的類型,對於JWT來說,值爲JWT;另一部分表示簽名算法,如,HMAC、SHA256、RSA。示例如下:

    4c59f0a5c9eb38c2385e0173c9b410b75e6.jpg


    2、負載信息(Payload)

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


    3、簽名(Signature)

    通過指定的算法將頭、負載、密碼信息作爲輸入條件,計算而得的一個字符串。


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

    

    JSON格式的頭信息和負載信息一般先要進行Base64編碼轉化。然後通過以下的算法獲得簽名:

    7f64fa93df2ee586836173a3682f5783dcb.jpg


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

    

hhhhh.ppppp.sssss

   

    JWT最常用的應用場景是爲用戶授權。用戶在登錄時,從授權服務器拿到JWT Token,後續的用戶請求只要攜帶此Token請求相應的資源或服務即可。服務端會在拿到用戶傳的Token後,進行合法性驗證。


    JWT另一個用途就是進行信息交換。由於JWT Token既可以用於承載數據,又是經過簽名的,所以,既可以包含更多的應用相關信息,又可以保證數據的安全性,防止數據被攔截後修改。


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



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