詳解BASIC認證

Basic 認證是HTTP 中非常簡單的認證方式,因爲簡單,所以不是很安全,不過仍然非常常用。本文詳細講解BASIC認證的過程及原理。


BASIC認證流程:


在HTTP協議進行通信的過程中,HTTP協議定義了基本認證過程以允許HTTP服務器對WEB瀏覽器進行用戶身份證的方法,當一個客戶端向HTTP服務 器進行數據請求時,如果客戶端未被認證,則HTTP服務器將通過基本認證過程對客戶端的用戶名及密碼進行驗證,以決定用戶是否合法。



客戶端在接收到HTTP服務器的身份認證要求後,會提示用戶輸入用戶名及密碼,然後將用戶名及密碼以BASE64加密,加密後的密文將附加於請求信息中,如當用戶名爲admin,密碼爲:123456時,客戶端將用戶名和密碼用“:”合併,並將合併後的字符串用BASE64加密爲密文,並於每次請求數據時,將密文附加於請求頭(Request Header)中。


HTTP服務器在每次收到請求包後,根據協議取得客戶端附加的用戶信息(BASE64加密的用戶名和密碼),解開請求包,對用戶名及密碼進行驗證,如果用戶名及密碼正確,則根據客戶端請求,返回客戶端所需要的數據;否則,返回錯誤代碼或重新要求客戶端提供用戶名及密碼。



圖解BASIC認證過程:


wKiom1gyliSTL0aLAAKQO3rXLNI345.png






1.  客戶端向服務器請求訪問受保護的數據,請求的內容可能是一個網頁或者是一個其它的MIME類型,此時,假設客戶端尚未被驗證,則客戶端提供如下請求至服務器:

Get /index.html HTTP/1.0
Host:
www.favccxx.com


2. 服務器向客戶端發送驗證請求代碼401,服務器返回的數據大抵如下:

HTTP/1.0 401 Unauthorised
Server: SokEvo/1.0
WWW-Authenticate: Basic realm="favccxx.com"
Content-Type: text/html
Content-Length: xxx


3.  當符合http1.0或1.1規範的客戶端(如IE,FIREFOX)收到401返回值時,將自動彈出一個登錄窗口,要求用戶輸入用戶名和密碼。

wKioL1gymUfhEyYJAACJQe8mYpA209.png


4.  用戶輸入用戶名和密碼後,將用戶名及密碼以BASE64加密方式加密,並將密文放入前一條請求信息中,則客戶端發送的第一條請求信息則變成如下內容:

Get /index.html HTTP/1.0
Host:www.favccxx.com
Authorization: Basic xxxxxxxxxxxxxxxxxxxxxxxxxxxx

wKiom1gymXeAkZAqAAAx2WP-YZo215.png

注:xxxx....表示加密後的用戶名及密碼,Authorization = Base64.encode("admin:password");


5.  服務器收到上述請求信息後,將Authorization字段後的用戶信息取出、解密,將解密後的用戶名及密碼與用戶數據庫進行比較驗證,如用戶名及密碼正確,服務器則根據請求,將所請求資源發送給客戶端。



BASIC認證優缺點


優點:

  • 使用非常簡單

  • 開發和調試工作簡單

  • 沒有複雜的頁面跳轉邏輯和交互過程

  • 更利於發起方控制

缺點:

  • 安全性低,每次都需要傳遞用戶名和密碼,用戶名和密碼很大程度上存在被監聽盜取的可能

  • 同時應用本地還需要保存用戶名和密碼,在應用本身的安全性來說,也存在很大問題

  • 開放平臺服務商出於自身安全性的考慮(第三方可以得到該服務商用戶的賬號密碼,對於服務商來說是一種安全隱患),未來也會限制此認證方式(Twitter已停止Basic Auth的支持)

  • 用戶如果更改了用戶名和密碼,還需要重新進行密碼校驗的過程



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章