1. 程式人生 > >HTTP入門(八):確認訪問使用者身份的認證

HTTP入門(八):確認訪問使用者身份的認證

8.1何為認證

某些Web頁面只想讓特定的人瀏覽,或者乾脆僅本人可見。未達到這個目的,必不可少的就是認證功能。

服務端為了驗證客戶端登陸者的身份,該使用者是否真的具有訪問系統的許可權,就需要核對“登入者本人才知道的資訊”、“登入者本人才會有的資訊”。

核對的資訊通常是指以下這些:

  • 密碼:只有本人才知道的字串資訊。
  • 動態令牌:僅限本人持有的裝置內顯示的一次性密碼
  • 數字證書:僅限本人(終端)持有的資訊
  • 生物認證:指紋和虹膜等本人的生理資訊
  • IC卡:僅限本人持有的資訊

HTTP使用的認證方式

  • BASIC認證(基本認證) 1.0/1.1
  • DIGEST認證(摘要認證) 1.1
  • SSL客戶端認證
  • FormBase認證(基於表單認證)

8.2基於表單認證

基於表單的認證方法並不是在HTTP協議中定義的。客戶端會向伺服器上的Web應用程式傳送登入資訊,按登入資訊的驗證結果認證。

多數情況下,輸入已經事先登入的使用者ID和密碼等使用者資訊,傳送給Web應用程式,基於認證結果來決定是否成功。

8.2.1認證多半為基於表單認證

由於使用上的便利性安全性問題,HTTP協議標準提供的BASIC認證和DIGEST認證幾乎不怎麼使用。另外,SSL客戶端認證雖然具有高度的安全等級,但因為匯入及維持費用等問題,還尚未普及。

SSH和FTP協議,伺服器與客戶端之間的認證是合乎標準規範的,並且滿足了最基本的功能從需求上的安全級別,因此這些協議的認證可以拿來直接使用。

但是由於Web網站的認證功能,能夠滿足其安全使用級別的標準規範並不存在,所以只好使用由Web應用程式各自實現基於表單的認證方式。

8.2.2 Session管理及Cookie應用

基於表單認證的標準規範尚未有定論,一般會使用Cookie來管理Session。

基於表單認證本身是通過伺服器的Web應用,將客戶端傳送過來的使用者ID和密碼與之前登入過的資訊做匹配來進行認證。

但鑑於HTTP是無狀態協議,之前已經認證成功的使用者狀態無法通過協議層面儲存下來。即,無法實現狀態管理,因此即使當該使用者下一次繼續訪問,也無法區分他與其他使用者。於是我們使用Cookie管理Session,以彌補HTTP協議中不存在的狀態管理功能。

Snipaste_2018-10-14_17-30-53.png

另外,不僅基於表單認證的登入資訊及認證過程無標準化的方法,伺服器端應如何儲存使用者提交的密碼及登入資訊也沒有標準化。

通常,一種安全的儲存方法是,先利用給密碼加鹽的方式增加額外資訊,再使用雜湊函式計算出雜湊值後儲存。

8.3 BASIC認證

BASIC認證(基本認證)是從HTTP1.0就定義的方式。

認證步驟

Snipaste_2018-10-14_18-05-35.png

BASIC認證雖然採用Base64編碼方式,但這不是加密處理。不需要任何附加資訊即可對其解碼。換言之,由於明文解碼後就是使用者ID和密碼,在HTTP等非加密通訊的線路上進行BASIC的認證,如果被別人竊聽,被盜的可能性極高。

1.使用上不靈活;2.安全等級不高,因此並不常用。

8.4 DIGEST認證

為了彌補BASIC認證存在的弱點,從HTTP/1.1起就有了DIGEST認證。DIGEST認證同樣使用質詢/響應的方式,但不會像BASIC認證那樣直接發明文密碼。

認證步驟

Snipaste_2018-10-14_18-17-20.png

1.使用上不靈活;2.安全等級不高,雖然高於BASIC,因此並不常用。

8.4 SSL客戶端認證

如果使用者的ID和密碼被盜,就很有可能被第三方冒充。利用SSL客戶端認證則可以避免該情況的發生。

SSL客戶端認證是藉由HTTPS的客戶端證書完成認證的方式,憑藉客戶端證書認證,客戶端來確認訪問是否來自己登陸客戶端。

8.4.1 SSL客戶端的認證步驟

未達到SSL客戶端認證的目的,需要事將客戶端證書分給客戶端,且客戶端必須安裝此證書。

  1. 接收到需要認證資源的請求,伺服器會發送Certificate Request報文,要求客戶端提供客戶端證書。
  2. 使用者選擇將傳送的客戶端證書後,客戶端會把客戶端證書資訊以Client Certificate 報文方式發給伺服器。
  3. 伺服器驗證客戶端證書驗證通過後方可領取證書內客戶端的公開祕鑰,然後開始HTTPS加密通訊。

8.4.2 SSL客戶端認證採用雙因素認證

多數情況下,客戶端認證不會僅依靠證書完成認證,一般會和表單認證組成雙因素認證。

第一個認證因素的SSL客戶端證書用來認證客戶端計算機,另一個認證因素的密碼則用來確定這是使用者本人的行為。

通過雙因素認證後,就可以確定是使用者本人正在使用匹配正確的計算機訪問伺服器。