日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

JSON WEB TOKEN(JWT)的分析

發布時間:2025/7/14 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JSON WEB TOKEN(JWT)的分析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

JSON WEB TOKEN(JWT)的分析

一般情況下,客戶的會話數據會存在文件中,或者引入redis來存儲,實現session的管理,但是這樣操作會存在一些問題,使用文件來存儲的時候,在多臺機器上,比較難實現共享,使用redis來存儲的時候,則需要引入多一個集群,這樣會增加管理的工作量,也不方便。有一個直觀的辦法,就是將session數據,存儲在客戶端中,使用簽名校驗數據是否有篡改,客戶請求的時候,把session數據帶上,獲取里面的數據,通過校驗,然后進行身份認證。

數據存儲在客戶端中,會存在一些挑戰:

  • 數據安全問題
  • 數據量不能太大
  • 續簽的問題
  • 注銷的問題

為了實現客戶端存儲會話數據的解決方案,制定了JSON Web Token的協議,詳細的協議可以在:RFC7529查看。下面我們看看jwt協議是怎樣解決上面的挑戰的。

JWT的結構:

JWT加密后,使用的格式,分為三部分,header,payload和signature,使用.號連接起來:

Header.Payload.Signature

JWT的header:

JWT的header,定義了存儲的算法和協議名稱:

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

JWT的Payload:

下面這些負載字段,是JWT協議提供選用,一般情況下,payload的數據是不加密存儲在客戶端中的,所以要注意不要存儲敏感信息:

iss (issuer):簽發人 exp (expiration time):過期時間 sub (subject):主題 aud (audience):受眾 nbf (Not Before):生效時間 iat (Issued At):簽發時間 jti (JWT ID):編號

payload除了這些字段,還可以擴展一些數據,更加符合我們的需求:

{"iss": "foo","extend_data": "hell" }

JWT的Signature

服務端,有一個秘鑰,通過秘鑰對header和payload進行簽名,使用header中指定的簽名算法類型,一般有HMAC,RSA和ECDSA,下面是簽名的格式:

HMACSHA256(base64UrlEncode(header) + "." + base64UrlEncode(payload), secret)

JWT的通訊方式

JWT一般會將token數據存儲在http請求的header中,通過Bearer來分隔:

headers: {'Authorization': 'Bearer ' + token }

定義好數據結構和通訊方式,下面看看如何處理一些問題:

續簽問題

每一個token產生,都應該限制好過期時間,確保只能在一段時間內有效,保證安全。當達到過期時間時,需要對token進行續簽,可以定時想服務器提交請求,重新獲取token來實現。

注銷問題

當客戶登錄的時候,需要注銷登錄會話,由于token是沒有狀態的,只能在客戶端把token刪除,偽造一個注銷的狀態,真正的注銷只能等待token過期。

也可以有種辦法,就是把token的信息記錄在redis中,當客戶退出時,講redis中的token刪除,而一般請求時,會通過redis對數據進行校驗,這樣可以實現真的注銷效果,但要引入多一個組件,把token變為有狀態,如果用這種辦法,也就不符合token存儲在客戶端的模式了

總結

如果能夠支持,會話用的數據量較小,對注銷可以等待超時的長效的場景,使用jwt作為會話數據存儲是會比較方便的。而對于會話數據量大的場景,還是使用一般的方式比較好點。

參考資料

RFC7529

轉載于:https://www.cnblogs.com/xiaohunshi/p/10358722.html

總結

以上是生活随笔為你收集整理的JSON WEB TOKEN(JWT)的分析的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。