必要的補充(二)——JWT

什麼是JWT

根據維基百科的定義,JSON WEB TokenJWT,讀作 [/dʒɒt/]),是一種基於JSON的、用於在網絡上聲明某種主張的令牌(token)。JWT通常由三部分組成: 頭信息(header), 消息體(payload)和簽名(signature)。

JWT管理session還有如下缺點:

  1. 更多的空間佔用。如果將原存在服務端session中的各類信息都放在JWT中保存在客戶端,可能造成JWT佔用的空間變大,需要考慮cookie的空間限制等因素,如果放在Local Storage,則可能受到XSS攻擊。

  2. 更不安全。這裏是特指將JWT保存在Local Storage中,然後使用Javascript取出後作爲HTTP header發送給服務端的方案。在Local Storage中保存敏感信息並不安全,容易受到跨站腳本攻擊,跨站腳本(Cross site script,簡稱xss)是一種“HTML注入”,由於攻擊的腳本多數時候是跨域的,所以稱之爲“跨域腳本”,這些腳本代碼可以盜取cookie或是Local Storage中的數據。可以從這篇文章查看XSS攻擊的原理解釋。

  3. 無法作廢已頒佈的令牌。所有的認證信息都在JWT中,由於在服務端沒有狀態,即使你知道了某個JWT被盜取了,你也沒有辦法將其作廢。在JWT過期之前(你絕對應該設置過期時間),你無能爲力。

  4. 不易應對數據過期。與上一條類似,JWT有點類似緩存,由於無法作廢已頒佈的令牌,在其過期前,你只能忍受“過期”的數據。

總結

  1. 在Web應用中,別再把JWT當做session使用,絕大多數情況下,傳統的cookie-session機制工作得更好
  2. JWT適合一次性的命令認證,頒發一個有效期極短的JWT,即使暴露了危險也很小,由於每次操作都會生成新的JWT,因此也沒必要保存JWT,真正實現無狀態。

 

擴展參考:講真,別再使用JWT了!

                  JWT全面解讀、使用步驟

                  一篇文章帶你分清楚JWT,JWS與JWE

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