cookie和jwt作用


1.COOKIE使用和優缺點

1.1 cookie原理: 用戶名+密碼

  • cookie是保存在用戶瀏覽器端,用戶名和密碼等明文信息

 

 

 1.2 session使用原理

  • session是存儲在服務器端的一段字符串,相當於字典的key

 

 

  •  1.用戶向服務器發送用戶名和密碼。
  • 2.驗證服務器后,相關數據(如用戶角色,登錄時間等)將保存在當前會話中。
  • 3.服務器向用戶返回session_id,session信息都會寫入到用戶的Cookie。
  • 4.用戶的每個后續請求都將通過在Cookie中取出session_id傳給服務器。
  • 5.服務器收到session_id並對比之前保存的數據,確認用戶的身份。

 

 

 1.3 session使用缺點

  • 1.這種模式最大的問題是,沒有分布式架構,無法支持橫向擴展。
  • 2.如果使用一個服務器,該模式完全沒有問題。
  • 3.但是,如果它是服務器群集或面向服務的跨域體系結構的話,則需要一個統一的session數據庫庫 來保存會話數據實現共享,
  • 4.這樣負載均衡下的每個服務器才可以正確的驗證用戶身份。

1.4 常用解決session方法

  • 1.一種解決方案是通過持久化session數據,寫入數據庫或文件持久層等。
  • 2.收到請求后,驗證服務從持久層請求數據。
  • 3.依賴於持久層的數據庫或者問題系統,會有單點風險,如果持久層失敗,整個認證體系都會掛掉。

 

 

  •  第一種:沒有session持久化
    •   沒有分布式架構,無法支持橫向擴展
    •   session默認存儲在內存中,如果把代碼部署在多台機器上,session保存到了其中某一台機器 的內存中
    •   用戶如果在A機器上登錄,只有A機器的內存中存了這個session的key,如果請求nginx路由到B 機器,B機器內存中沒有這個session數據,就需要從新登錄
  • 第二種:寫入數據庫或文件持久層
    •   解決了橫向擴展問題
    •   數據庫持久層出現問題,所有集群都沒辦法登錄, 單點故障
    •   如果數據放到mysql中,用戶量過大,查詢很慢,效率很低

2. JWT介紹

2.1 jwt原則

  • 最簡單理解:jwt本質就是, 把用戶信息通過加密后生成的一個字符串

 

 

 2.2 JWT的數據結構

  • 1)jwt頭:JWT頭部分是一個描述JWT元數據的JSON對象
  • 2)有效載荷:七個默認字段+自定義私有字段
  • 3)簽名=HMACSHA256( base64UrlEncode(header) + "." + base64UrlEncode(payload) ,secret)

 

 

 第一部分: JWT頭

  • base64UrlEncode(header) --->字符串

 

 第二部分: 有效載荷 沒有敏感數據的用戶信息

  • base64UrlEncode(payload) --->字符串

 

 第三部分: 簽名哈希

  • 簽名=HMACSHA256( base64UrlEncode(header) + "." + base64UrlEncode(payload) ,secret)

 

 2.3 jwt核心

  • 1)給用戶頒發的token值相當於一把鎖,服務器端的秘鑰相當於一把鑰匙
  • 2)每次客戶端請求都會攜帶這把鎖,服務器端用秘鑰去開這把鎖,若果無法打開就證明是偽造的

2.4 jwt特點分析

  • 1、JWT的最大缺點是服務器不保存會話狀態,所以在使用期間不可能取消令牌或更改令牌的權 限,一旦JWT簽發,在有效期內將會一直有效。
  • 2、JWT本身包含認證信息,因此一旦信息泄露,任何人都可以獲得令牌的所有權限。
  • 3、為了減少盜用和竊取,JWT不建議使用HTTP協議來傳輸代碼,而是使用加密的HTTPS協議進行 傳輸。
  • 4、JWT不僅可用於認證,還可用於信息交換,善用JWT有助於減少服務器請求數據庫的次數。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM