《HTTP權威指南》——認證機制
阿新 • • 發佈:2019-02-11
HTTP應該實現許可權機制:即某些特定的內容只有特定使用者才能訪問;某些特定的事務只有特定的使用者能夠執行。此時,我們需要對使用者進行認證。
認證
什麼是認證
所謂認證, 就是使用者給出身份證明,然後伺服器加以驗證。
HTTP認證模型:
HTTP提供了質詢/響應認證框架用以簡化認證過程。
- 1)Web應用程式收到HTTP請求
- 2)Web應用程式以一個“認證質詢”作為響應
- 3)使用者提供身份證明
- 4)伺服器驗證身份證明。
認證協議 和 首部
HTTP定義了兩個官方的認證協議:基本認證和摘要認證。(開發人員也可以設計自己的認證協議)
不同的認證協議其對應的首部及實現機制會有所差別。 但認證一般包括以下步驟
步驟 | 首部 | 描述 | 方法/狀態 |
---|---|---|---|
請求 | 第一條請求沒有認證資訊 | GET | |
質詢 | WWW-Authenticate | 伺服器拒絕第一條請求,並說明需要使用者提供使用者民個密碼 | 401 Unauthorized |
授權 | Authorization | 客戶端重新發出請求,請求中附加Authorization 用以說明認證演算法、使用者名稱、密碼 | GET |
成功 | Authorization-Info | 如果授權成功,伺服器會文件返回 | 200 OK |
安全域
為了讓伺服器上不同的資源有不同的認證許可權,HTTP設計者提出了安全域
WWW-Authenticate
質詢中包含了一個realm
指令。 Web伺服器會將受保護的文件組織成一個安全域,每個安全域有自己的授權使用者集。
基本認證
基本認證是目前最流行的HTTP認證協議,幾乎每個主要的HTTP客戶端和伺服器都實現了基本認證機制。
基本認證的流程
在基本認證中,Web伺服器拒絕事務,質詢客戶端,請客戶端提供使用者名稱和密碼。伺服器返回401狀態碼來初始化質詢,並用WWW-authenticate
響應首部指定要訪問的安全域。 瀏覽器收到質詢時,會開啟客戶端,請求使用者輸入這個域的使用者名稱和密碼。然後瀏覽器為使用者名稱和密碼新增擾碼,再用Authorization
+ Base-64編碼: 在基本認證中,使用者名稱和密碼被打包在一起,並用Base-64編碼方式對其進行編碼。
+ 代理認證: 中間的代理伺服器也可以實現認證功能。 代理認證步驟域Web伺服器身份認證步驟相同,但首部和狀態碼有一些區別。
基本認證的缺陷
基本認證很容易導致使用者名稱和密碼洩露。
在基本認證中,使用者名稱和密碼在網路中傳輸,儘管進行了(如Base-64編碼方式)加密,這些密文也很容易被破解。就算沒有被破解,惡意使用者也可以直接使用密文的密碼通過伺服器的認證。
另外,一些惡意的使用者也可以偽裝成伺服器騙取使用者的使用者名稱和密碼。
摘要認證
儘管基本認證便捷靈活,但存在極大的安全性問題。針對認證的安全性,摘要認證做了一些改進,很大程度上避免了安全性問題。
以下是摘要認證做的一些改進錯誤:
- 永遠不會以明文方式在網路上傳送密碼。(Base-64加密幾乎相當於明文)
- 可以防止惡意使用者捕獲並重放認證的握手過程。
- 可以有選擇低防止對報文內容的篡改。
- 防範一些其他的常見的攻擊方式。
摘要認證涉及到的內容較多,且比較複雜,這裡不太篇幅地介紹了。等到要使用時查閱一些相關的內容就可以了。