1. 程式人生 > 其它 >常見的鑑權方式,你真的不想知道嗎

常見的鑑權方式,你真的不想知道嗎

2021-07-07

https://www.jianshu.com/p/4a00c0c3bf1d

主要內容

  1. 鑑權的作用
  2. 幾種常見的鑑權
  3. 各個鑑權的適用場景

一、什麼是鑑權

鑑權是指驗證使用者是否有權利訪問系統的行為。

二、目前常見的鑑權方式

常見的鑑權方式有以下4種方式:

  1. HTTP Basic Authentication
  2. token
  3. session + cookie
  4. OAuth

2.1 HTTP Basic Authentication鑑權方式

這是HTTP協議實現的基本認證方式,我們在瀏覽網頁時,從瀏覽器正上方彈出的對話方塊要求我們輸入賬號密碼,正是使用了這種認證方式。

2.1.1 HTTP Basic Authentication鑑權方式的流程
http基本鑑權方式
2.1.2 HTTP Basic Authentication鑑權方式的登出

認證成功後,客戶端每次傳送請求都會帶上Authorization頭部引數,除了使session過期外,客戶端如何主動登出登入呢?下面是一種解決方案:
首先需要服務端專門設定一個專門用於登出的賬號,客戶端主動去修改請求頭Authorization資訊,當服務端讀取到是這個專用於登出的賬戶,就執行登出流程。

2.1.3 HTTP Basic Authentication鑑權方式的適用範圍

這種認證方式存在缺陷,首先它把加密後的賬密直接放在請求頭,加上base64加密的方式是可逆的,這樣賬密就容易洩露。所有這種認證方式一般用於對安全要求性不高的系統上。

2.2 token鑑權方式

2.2.1 token鑑權方式流程
  1. 客戶端使用賬密登入
  2. 服務端驗證賬密
  3. 賬密驗證通過,服務端生成一個token,再把token傳送給客戶端
  4. 客戶端通過cookie或者其他方式將token儲存起來
  5. 客戶端以後傳送請求都需要帶上token
  6. 服務端驗證token的合法性,校驗通過則返回資源,不通過則返回401狀態碼
2.2.2 token鑑權方式適用場景

token驗證比較靈活,適用於大部分場景。
常用的token鑑權方式的解決方案是JWT,JWT是通過對帶有相關使用者資訊的json進行加密,加密的方式比較靈活,可以根據需求具體設計,這裡就不做過多介紹。

2.3 session + cookie鑑權方式

請看--》java web cookie和session

2.3.1 session + cookie鑑權方式的問題

session一般是存在記憶體裡的,隨著使用者的增多,伺服器的開銷也明顯變大了。

以上問題可以通過適當增加伺服器來滿足需求,但這樣session的認證方式就會出現問題,比如已登入的使用者session存在伺服器A上,可是由於負載均衡,下次請求到了另一臺伺服器B上,伺服器B沒有儲存session,則又要求使用者再次登入,這明顯是不合理的。

Tomcat伺服器提供了叢集之間session共享的解決方案,不同伺服器之間通過複製更新session的方式來共享session,但如果叢集的數量很多,檢查和複製的行為會佔去一定資源,因此這種方式在伺服器比較多的情況下是不理想的。

如果通過雜湊的方式某個使用者請求路由到某一臺伺服器上,那麼這個使用者只需在這臺伺服器上儲存session,可以解決上述問題,但同時這也限制了叢集負載均衡的能力,可能會出現某一時刻,大量的請求到達某一臺伺服器,但是其他伺服器又相對空閒的情況。

最後一點,由於sessionid是基於cookie儲存的方式儲存,如果cookie被截獲,使用者就容易受到跨站請求偽造的攻擊,這是不安全的。

2.4 OAuth鑑權方式

請看--》身份認證系統OAuth2的四種模式



作者:n油炸小朋友
連結:https://www.jianshu.com/p/4a00c0c3bf1d
來源:簡書
著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。