token解決cookie的弊端 cookie的弊端 **弊端一:**瀏覽器請求過伺服器後,下一次訪問時伺服器就會通過瀏覽器cookie中攜帶的sessionID去尋找對應session,但是如果伺服器做了負載均衡,用戶下一次請求可能會被定向到其他伺服器節點,那台伺服器上沒有用戶session信息, ...
token解決cookie的弊端
目錄cookie的弊端
- 弊端一:瀏覽器請求過伺服器後,下一次訪問時伺服器就會通過瀏覽器cookie中攜帶的sessionID去尋找對應session,但是如果伺服器做了負載均衡,用戶下一次請求可能會被定向到其他伺服器節點,那台伺服器上沒有用戶session信息,就會導致驗證失敗,所以session預設機制下不適合做分散式部署。其實可以將session集中存儲在同一個地方,所有伺服器都去這裡去訪問,但增加了單點失敗的可能性。如果負責存儲session的機器出現問題,所有人都要重新登錄。
- 弊端二:cookie安全性較低。
token解決弊端一
什麼是token和JWT
token:簡單說就是伺服器給瀏覽器發了一枚令牌,以後帶著令牌過來就能隨便訪問。
JWT:全稱 JSON Web Tokens ,是一種規範化的 token。
JWT的構成
它是一個字元串,由頭部、載荷與簽名三部分構成,兩兩之間用.分隔。
頭部(Header):一般存放令牌類型和簽名(加密)演算法類型。將其用Base64Url進行編碼。
載荷(Payload):包括簽發人、生效時間、編號等信息。將其用Base64Url進行編碼。
簽名(Signature):將前兩部分編碼過的字元串用指定的簽名演算法和伺服器提供的密鑰進行加密得到簽名。
token工作流程
- 用戶通過用戶名及密碼進行登錄驗證。
- 伺服器驗證成功後生成token將其返回給瀏覽器。
- 瀏覽器可以將其存儲在cookie中(也可以存儲在其他地方),在以後訪問中將token添加到http請求的header中。
- 伺服器通過token中前兩部分內容及伺服器存儲的密鑰再次加密,然後與token中的簽名進行核對,相同說明已登錄。
這樣一來,伺服器不用保存每個用戶的session,只需要保存一段密鑰。token由用戶自己保存。
token解決弊端二
CSRF攻擊
CSRF(Cross-site request forgery),即跨站請求偽造。
舉例:我去訪問A網站,伺服器給了我cookie,我又去訪問B網站,有人在B網站中放入了一個來自A網站的鏈接,點擊後會執行一些非我本意的操作,我點擊後瀏覽器帶著我的cookie去請求,伺服器誤以為就是我想來執行這些操作,於是就涼涼了。
token防止CSRF
瀏覽器請求時會預設攜帶cookie,但不會直接攜帶token。
還有人說cookie中不是也可能存有token嗎,那cookie被劫持和token被劫持有什麼區別?CSRF的原理是冒用別人的cookie去欺騙伺服器,但不能獲取到cookie中的信息。所以即便cookie被劫持,但cookie本身不參與驗證,只是起到存儲作用,用於驗證的token必須添加到http的header中。