目前我們常用的鑑權有四種:
token 驗證
oauth(開放授權)
一.http basic authentication
這種授權方式是瀏覽器遵守http協議實現的基本授權方式,http協議進行通訊的過程中,http協議定義了基本認證認證允許http伺服器對客戶端進行使用者身份證的方法。
認證過程:
1. 客戶端向伺服器請求資料,請求的內容可能是乙個網頁或者是乙個ajax非同步請求,此時,假設客戶端尚未被驗證,則客戶端提供如下請求至伺服器:
2. 伺服器向客戶端傳送驗證請求**401,(www-authenticate: basic realm=」google.com」這句話是關鍵,如果沒有客戶端不會彈出使用者名稱和密碼輸入介面)伺服器返回的資料大抵如下:
3. 當符合http1.0或1.1規範的客戶端(如ie,firefox)收到401返回值時,將自動彈出乙個登入視窗,要求使用者輸入使用者名稱和密碼。
4. 使用者輸入使用者名稱和密碼後,將使用者名稱及密碼以base64加密方式加密,並將密文放入前一條請求資訊中,則客戶端傳送的第一條請求資訊則變成如下內容:
注:d2fuzzp3yw5n表示加密後的使用者名稱及密碼(使用者名稱:密碼 然後通過base64加密,加密過程是瀏覽器預設的行為,不需要我們人為加密,我們只需要輸入使用者名稱密碼即可)
5. 伺服器收到上述請求資訊後,將authorization欄位後的使用者資訊取出、解密,將解密後的使用者名稱及密碼與使用者資料庫進行比較驗證,如使用者名稱及密碼正確,伺服器則根據請求,將所請求資源傳送給客戶端
二.session-cookie
第二種這個方式是利用伺服器端的session(會話)和瀏覽器端的cookie來實現前後端的認證,由於http請求時是無狀態的,伺服器正常情況下是不知道當前請求之前有沒有來過,這個時候我們如果要記錄狀態,就需要在伺服器端建立乙個會話(seesion),將同乙個客戶端的請求都維護在各自得會會話中,每當請求到達伺服器端的時候,先去查一下該客戶端有沒有在伺服器端建立seesion,如果有則已經認證成功了,否則就沒有認證。
session-cookie認證主要分四步:
1,伺服器在接受客戶端首次訪問時在伺服器端建立seesion,然後儲存seesion(我們可以將seesion儲存在記憶體中,也可以儲存在redis中,推薦使用後者),然後給這個session生成乙個唯一的標識字串,然後在響應頭中種下這個唯一標識字串。
2.簽名。這一步只是對sid進行加密處理,服務端會根據這個secret金鑰進行解密。(非必需步驟)
3.瀏覽器中收到請求響應的時候會解析響應頭,然後將sid儲存在本地cookie中,瀏覽器在下次http請求de 請求頭中會帶上該網域名稱下的cookie資訊,
4.伺服器在接受客戶端請求時會去解析請求頭cookie中的sid,然後根據這個sid去找伺服器端儲存的該客戶端的session,然後判斷該請求是否合法。
三.token 驗證
使用基於 token 的身份驗證方法,大概的流程是這樣的:
1. 客戶端使用使用者名稱跟密碼請求登入
2. 服務端收到請求,去驗證使用者名稱與密碼
3. 驗證成功後,服務端會簽發乙個 token,再把這個 token 傳送給客戶端
4. 客戶端收到 token 以後可以把它儲存起來,比如放在 cookie 裡或者 local storage 裡
5. 客戶端每次向服務端請求資源的時候需要帶著服務端簽發的 token
6. 服務端收到請求,然後去驗證客戶端請求裡面帶著的 token,如果驗證成功,就向客戶端返回請求的資料
總的來說就是客戶端在首次登陸以後,服務端再次接收http請求的時候,就只認token了,請求只要每次把token帶上就行了,伺服器端會攔截所有的請求,然後校驗token的合法性,合法就放行,不合法就返回401(鑑權失敗)。
前後端常見的幾種鑑權方式
每個專案產品都要加埋點,加500行埋點是不是會占用你一兩天的時間而且很容易犯錯,想只用一小時準確加完這500行埋點剩下一天喝茶聊天麼?來試試這520工具,高效加埋點,目前我們公司100號前端都在用,因為很好用,所以很自然普及開來了,推薦給大家吧 目前我們常用的鑑權有四種 token 驗證 oauth...
前端鑑權的幾種方式
基於瀏覽器的一種鑑權方式。1.未授權請求,攔截,返回 401 unauthorised 2.支援的瀏覽器彈出使用者名稱密碼框,輸入使用者名稱密碼,連同上次請求資料,一起傳送到服務端 使用授權頭,authorization basic base64 編碼的使用者名稱密碼 3.服務端驗證通過,返回資源 ...
前後端分離 通用鑑權方案 (分組許可權)
做了幾個前後端分離的專案,都遇到了許可權管理的問題。這裡總結一下實現的方案及注意事項。鑑權的需求一般是這樣的,假設有 a 主頁 b,c,d 系統配置頁 四個頁面 使用者與頁面是多對多的關係,相互之間會有交叉,所以使用簡單的分級許可權實現起來是很麻煩的。如果新增乙個使用者,使其能訪問abc,就需要新建...