本文簡介 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
。bash
這種認證方法的優勢是簡單,容易理解。服務器
缺點有:編碼
這種認證方法結合了 Session 和 Cookie。服務端將本次會話信息以 Session 對象的形式保存在服務端的內存、數據庫或文件系統中,並將對應的 Session 對象 ID 值 SessionID 以 Cookie 形式返回給客戶端,SessionID 保存在客戶端的 Cookie 中。spa
這是一種有狀態的認證方法:服務端保存 Session 對象,客戶端以 Cookie 形式保存 SessionID。.net
其交互過程以下:3d
優勢:
缺點:
這是一種 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 認證法。