JWT的一些衍生思考 session cookie 等

JWT(Json Web Token)

JWT是一種客戶端與服務器雙方之間傳遞信息的基於JSON的開放標準(RFC 7519)。該token被設計爲緊湊且安全的,特別適用與分佈式的單點登陸(SSO)場景。php

由於數字簽名的存在,這些信息是可信的,JWT可使用HMAC算法或者是RSA的公私祕鑰對進行簽名。簡潔(Compact): 能夠經過URL,POST參數或者在HTTP header發送,由於數據量小,傳輸速度也很快 自包含(Self-contained):負載中包含了全部用戶所須要的信息,避免了屢次查詢數據庫。算法

 

JWT的結構

JWT包含了使用.分隔的三部分: Header 頭部 Payload 負載 Signature 簽名數據庫

其結構看起來是這樣的Header.Payload.Signature瀏覽器

 

流程上是這樣的:安全

  • 用戶使用用戶名密碼來請求服務器
  • 服務器進行驗證用戶的信息
  • 服務器經過驗證發送給用戶一個token
  • 客戶端存儲token,並在每次請求時附送上這個token值
  • 服務端驗證token值,並返回數據

 

 

session認證

咱們知道,http協議自己是一種無狀態的協議,而這就意味着若是用戶向咱們的應用提供了用戶名和密碼來進行用戶認證,那麼下一次請求時,用戶還要再一次進行用戶認證才行,由於根據http協議,咱們並不能知道是哪一個用戶發出的請求,因此爲了讓咱們的應用能識別是哪一個用戶發出的請求,咱們只能在服務器存儲一份用戶登陸的信息,這份登陸信息會在響應時傳遞給瀏覽器,告訴其保存爲cookie,以便下次請求時發送給咱們的應用,這樣咱們的應用就能識別請求來自哪一個用戶了,這就是傳統的基於session認證。服務器

可是這種基於session的認證使應用自己很可貴到擴展,隨着不一樣客戶端用戶的增長,獨立的服務器已沒法承載更多的用戶,而這時候基於session認證應用的問題就會暴露出來。cookie

 

有時候瀏覽器禁用了cookie,這個時候session認證就沒法工做session

有效的解決方法能夠有數據結構

①url中傳遞sessionID,須要作php.ini的配置分佈式

②作一個hidden的隱藏域

③Etag

④HTML5的LocalStorage

 

LocalStorage是h5的新特性,這個特性主要是用來做爲本地存儲來使用的,解決了cookie存儲空間不足的問題(cookie中每條cookie的存儲空間爲4k),localStorage中通常瀏覽器支持的是5M大小,這個在不一樣的瀏覽器中localStorage會有所不一樣。

 

session,cookie

Session是在服務端保存的一個數據結構,用來跟蹤用戶的狀態,這個數據能夠保存在集羣、數據庫、文件中;
Cookie是客戶端保存用戶信息的一種機制,用來記錄用戶的一些信息,也是實現Session的一種方式。

相關文章
相關標籤/搜索