前言
認證功能能讓Web頁面只被有權限的人訪問。而認證機制到底是怎樣一個原理呢?經過今天的學習能對這個有個大體的瞭解。瀏覽器
正文
什麼是認證
計算機沒法判斷對方的身份,須要客戶端自報家門。安全
服務端爲確認客戶端是否真的具備訪問系統的權限,須要覈對服務器
「登陸者本人才知道的信息」、「登陸者本人才會有的信息」學習
HTTP使用的認證方式
HTTP/1.1使用的認證方式以下所示。編碼
BASIC認證(基本認證)加密
DIGEST認證(摘要認證)orm
SSL客戶端認證blog
FormBase認證(基於表單認證)ssl
Basic認證
Web服務器與通訊客戶端之間進行的認證方式。資源
Basic認證的認證步驟
- 客戶端請求的資源須要BASIC認證,服務器隨401狀態碼(須要認證),返回帶WWW-Authenticate首部字段的響應。
- 接收到401狀態碼的客戶端爲了經過BASIC認證,須要將用戶ID和密碼發送到服務器(冒號鏈接,再通過Base64編碼處理)。
- 接收到包含首部字段Authorization請求的服務器,會對信息的正確性進行驗證。(若經過,則返回一個包含Request-URI資源的響應)
PS:Basic認證所採用的Base64編碼並非加密處理。
DIGEST認證
採用和Basic認證同樣的質詢/響應(challenge/response)的方式。
Digest認證的認證步驟:
- 客戶端請求需認證的資源時,服務器會隨401狀態碼返回帶WWW-Authenticate首部字段的響應,該字段包含質問響應方式認證所需的臨時質詢碼(隨機數,nonce)。
- 客戶端接收到401狀態碼,返回的響應中包含DIgest認證必須得首部字段Authenticate信息。(Authenticate中包含username,realm,nonce,uri和response的字段信息,realm和nonce是從服務器接收到的響應中的字段)
- 服務器接收到包含首部字段Authorization請求的服務器,確認認證信息的正確性。經過後返回包含Request-URI資源的響應。
SSL客戶端認證
藉由HTTPS的客戶端證書完成認證的方式。
憑藉客戶端證書認證,服務器可確認訪問是否來自已登陸的客戶端。
SSL客戶端認證的步驟:
需事先將客戶端證書分發給客戶端,且客戶端必須安裝此證書。
- 服務器接收到須要認證資源的請求時,服務器會發送Certificate Request報文,要求客戶端提供客戶端證書。
- 客戶端將客戶端證書信息以Client Certificate報文方式發送給服務器。
- 服務器驗證客戶端證書驗證經過後才能領取證書內客戶端的公開密鑰,而後開始HTTPS加密通訊。
SSL客戶端認證採用雙因素認證
證書認證(SSL客戶端證書認證客戶端計算機)+表單認證(密碼用來肯定是用戶本人的行爲)
基於表單認證
並非HTTP協議中定義的。客戶端向服務器上的Web應用程序發送登陸信息(Credential),按登陸信息的驗證結果認證。
認證多半爲基於表單認證
BASIC和DIGEST幾乎不怎麼使用(便利性和安全性考慮),SSL客戶端認證未普及(導入和維持費用等問題)
Session管理和Cookie應用
HTTP是無狀態協議,以前已認證成功的用戶狀態沒法經過協議層面保存下來。即沒法實現狀態管理,咱們使用Cookie來管理Session(會話),以彌補HTTP協議中不存在的狀態管理功能。
步驟:
- 客戶端把用戶ID和密碼等登陸信息放入報文的實體部分,一般以POST請求的方式發送給服務器。
- 服務器會發放用以識別用戶的Session ID。經過驗證從客戶端發送過來的登陸信息進行身份認證,將用戶的認證狀態和Session ID綁定後記錄在服務器端。
- 客戶端接收到Session ID後,會將其做爲Cookie保存在本地。下次向服務器發送請求時,瀏覽器自動發送Cookie,Session ID會隨之發送到服務器。服務端經過驗證接收到的Session ID識別用戶和其認證狀態。