原文參考:
該方式是 mvc 架構中最常用的認證方案,在前後端分離中也是可以用的。幾乎所有的 web 框架都預設整合了 session-cookie 的認證方式,而且對 session-cookie 方式的安全性和穩定性方面都有很成熟的處理方案。
當前端**使用後端 web 框架當做 web 容器驅動時,session-cookie 方案可作為首選的認證方案。
jwt(json web token)是最常用的一種 token 認證方式,已成為 token 認證的標準事實。jwt 方式將 token 分段,使其可以保持少量資料,還增加了簽名驗證,確保了 token 的安全性。jwt 網上介紹的資料很多,這裡不再贅述。不了解的,可參考下邊這些資料:
oauth 更像是一種授權機制。資料的所有者告訴系統,同意授權第三方應用進入系統,獲取這些資料。系統從而產生乙個短期的進入令牌(token),用來代替密碼,供第三方應用使用。
刨去不常用的 oauth,這裡對比兩種前兩種常用的認證方式 jwt auth 和 session-cookie auth ,到底誰才是前後端分離認證的最佳實踐呢。從下面幾個方向分析比對。
session-cookie 是有狀態的服務,在服務端儲存了 session 的資訊。當服務端擴容的時候,需要考慮到 session 的共享問題,這個問題已有成熟的解決方案,可使用 session 複製、共享、持久化等方式解決,大多數的分布式 web 框架已經整合了處理方案。jwt 驗證方式是無狀態的服務,服務端可隨意擴縮容。
session-cookie 方式基於 cookie,也就是必須是瀏覽器或支援 cookie 的瀏覽器封裝的框架,純移動端無法使用。jwt 不同,不依賴 cookie, 只要在本地可儲存即可。
在 session-cookie 認證方式中,因為把 sessionid 儲存在了 cookie 中,很容易引起 crsf 攻擊。在大多數的 web 框架中有整合解決方案,如 django 的 csrftoken 、beego 的 xsrftoken 等。在使用 session-cookie 方案時建議開啟 web 框架的 csrf 功能。
jwt 認證,可以把 token 存放在 cookie 或 localstorage。建議存在 localstorage,這樣就徹底避免了 crsf 攻擊。
session-cookie 方案,因為後端服務儲存了 session 資訊,在認證的時候需要查詢,當有大量認證的時候是非常耗費資源的。jwt 可以把資訊放到 token 中,只需要驗證解碼,使用簽名驗證 token 即可,相對來說效率會有提公升。
拋開業務場景談技術都是耍流氓。不同的業務場景,不同的架構設計,適用的認證方式也是不同的。這裡按我自己的經驗總結了下,什麼情況下該使用那種認證方式,大家可參考。
前後端分離 WebAPI Vue開發 身份認證
前後端分離 webapi vue開發 遠端資料請求axios 前後端分離 webapi vue開發 跨域設定 前後端分離 webapi vue開發 身份認證 儲存使用者身份可以用cache記憶體或者redis,本文實現用的是redis。1 在登入頁或者首頁頁面開啟後,先獲取token使用者身份 獲取...
前後端分離
關於前後端分離的一些好的文章推薦 前端框架 為什麼前後端分離 最直白的理解,我認為是因為在開發過程中,前端總是需要等待後端的環境搭建好之後,前端才能獲取相關資料,對於前端的開發影響很大,事實上前端並不關心後端的開發,那麼有沒有方法不讓後端影響前端的開發呢?其實後端提供的是什麼?乙個執行伺服器,乙個就...
前後端分離
在此說明 前後端分離有利於後端的快速開發,但並不利於搜尋引擎優化 seo 上圖能清晰的看到,使用前後端分離模式進行開發,瀏覽器會向伺服器傳送請求,伺服器會向瀏覽器傳送乙個類似框架的html,是固定的空殼,此時瀏覽器再使用ajax請求向後端伺服器索要資料,後端伺服器返回json字串給瀏覽器,從而使瀏覽...