本文簡介 HTTP Basic,Session,Token 三種認證方法。數據庫
這是一種最基本的認證方法。跨域
在這種認證方法下,用戶每次發送請求時,請求頭中都必須攜帶能經過認證的身份信息。瀏覽器
其交互過程以下:安全
Basic
方法進行認證: WWW-Authenticate: Basic
。Authorization: Basic aHk6bXlwYXNzd29yZA==
。客戶端 服務端 ------ ------ 1-----------------------------------------> GET / HTTP/1.1 <-------------------------2 HTTP/1.1 401 Unauthorized WWW-Authenticate: Basic 3-----------------------------------------> GET / HTTP/1.1 Authorization: Basic aHk6bXlwYXNzd29yZA== <------------------------4 HTTP/1.1 200 OK 5-----------------------------------------> GET /another-path/ HTTP/1.1 Authorization: Basic aHk6bXlwYXNzd29yZA==
其中傳送的身份信息是 <username>:<password>
經 base64 編碼後的字串。如本例中的 aHk6bXlwYXNzd29yZA==
, 經 base64 解碼後爲 hy:mypassword
。服務器
這種認證方法的優勢是簡單,容易理解。編碼
缺點有:.net
這種認證方法結合了 Session 和 Cookie。服務端將本次會話信息以 Session 對象的形式保存在服務端的內存、數據庫或文件系統中,並將對應的 Session 對象 ID 值 SessionID 以 Cookie 形式返回給客戶端,SessionID 保存在客戶端的 Cookie 中。3d
這是一種有狀態的認證方法:服務端保存 Session 對象,客戶端以 Cookie 形式保存 SessionID。code
其交互過程以下:對象
優勢:
缺點:
這是一種 SPA 應用和 APP 常常使用的認證方法。它是一種無狀態的認證方法。
客戶端首先將用戶信息發送給服務端,服務端根據用戶信息+私鑰生成一個惟一的 Token 並返回給客戶端。Token 只保存在客戶端,以後客戶端的每一個請求頭中都攜帶 Token,而服務端只經過運算(無需查詢)來驗證用戶。
客戶端 服務端 ------ ------ 1-----------------------------------------> GET / HTTP/1.1 <-------------------------2 HTTP/1.1 401 Unauthorized WWW-Authenticate: Token 3-----------------------------------------> GET / HTTP/1.1 Authorization: Token f613d789819ff93537ee6a <------------------------4 HTTP/1.1 200 OK 5-----------------------------------------> GET /another-path/ HTTP/1.1 Authorization: Token f613d789819ff93537ee6a
優勢:
缺點:
目前使用較多的是基於JWT(JSON Web Tokens) 的 Token 認證法。