HTTP請求報頭: Authorization
HTTP響應報頭: WWW-Authenticate
HTTP認證是基於質詢/回應(challenge/response)的認證模式
基本認證 basic authentication(HTTP1.0提出的認證方法)
基本認證是一種用來允許Web瀏覽器或其他客戶端程序在請求時提供用戶名和口令形式的身份憑證的一種登錄驗證方式。
把 "用戶名+冒號+密碼"用BASE64算法加密后的字符串放在http request 中的header Authorization中發送給服務端。
客戶端對於每一個realm,通過提供用戶名和密碼來進行認證的方式。
包含密碼的明文傳遞。
基本認證步驟:
1、客戶端訪問一個受http基本認證保護的資源。
2、服務器返回401狀態,要求客戶端提供用戶名和密碼進行認證。(驗證失敗的時候,響應頭會加上WWW-Authenticate: Basic realm="請求域"。)
401 Unauthorized
WWW-Authenticate: Basic realm="WallyWorld"
3、客戶端將輸入的用戶名密碼用Base64進行編碼后,采用非加密的明文方式傳送給服務器。
Authorization: Basic xxxxxxxxxx.
4、服務器將Authorization頭中的用戶名密碼解碼並取出,進行驗證,如果認證成功,則返回相應的資源。如果認證失敗,則仍返回401狀態,要求重新進行認證。
特記事項:
1、Http是無狀態的,同一個客戶端對同一個realm內資源的每一個訪問會被要求進行認證。
2、客戶端通常會緩存用戶名和密碼,並和authentication realm一起保存,所以,一般不需要你重新輸入用戶名和密碼。
3、以非加密的明文方式傳輸,雖然轉換成了不易被人直接識別的字符串,但是無法防止用戶名密碼被惡意盜用。雖然用肉眼看不出來,但用程序很容易解密。
優點:
基本認證的一個優點是基本上所有流行的網頁瀏覽器都支持基本認證。基本認證很少在可公開訪問的互聯網網站上使用,有時候會在小的私有系統中使用(如路由器
網頁管理接口)。后來的機制HTTP摘要認證是為替代基本認證而開發的,允許密鑰以相對安全的方式在不安全的通道上傳輸。
程序員和系統管理員有時會在可信網絡環境中使用基本認證,使用Telnet或其他明文網絡協議工具手動地測試Web服務器。這是一個麻煩的過程,但是網絡上傳輸的
內容是人可讀的,以便進行診斷。
缺點:
雖然基本認證非常容易實現,但該方案建立在以下的假設的基礎上,即:客戶端和服務器主機之間的連接是安全可信的。特別是,如果沒有使用SSL/TLS這樣的傳輸
層安全的協議,那么以明文傳輸的密鑰和口令很容易被攔截。該方案也同樣沒有對服務器返回的信息提供保護。
現存的瀏覽器保存認證信息直到標簽頁或瀏覽器被關閉,或者用戶清除歷史記錄。HTTP沒有為服務器提供一種方法指示客戶端丟棄這些被緩存的密鑰。這意味着服務
器端在用戶不關閉瀏覽器的情況下,並沒有一種有效的方法來讓用戶登出。
一個例子:
這一個典型的HTTP客戶端和HTTP服務器的對話,服務器安裝在同一台計算機上(localhost),包含以下步驟:
客戶端請求一個需要身份認證的頁面,但是沒有提供用戶名和口令。這通常是用戶在地址欄輸入一個URL,或是打開了一個指向該頁面的鏈接。服務端響應一個401應
答碼,並提供一個認證域。接到應答后,客戶端顯示該認證域(通常是所訪問的計算機或系統的描述)給用戶並提示輸入用戶名和口令。此時用戶可以選擇確定或取
消。用戶輸入了用戶名和口令后,客戶端軟件會在原先的請求上增加認證消息頭(值是base64encode(username+":"+password)),然后重新發送再次嘗試。
在本例中,服務器接受了該認證屏幕並返回了頁面。如果用戶憑據非法或無效,服務器可能再次返回401應答碼,客戶端可以再次提示用戶輸入口令。
注意:客戶端有可能不需要用戶交互,在第一次請求中就發送認證消息頭。
HTTP OAuth認證
OAuth對於Http來說,就是放在Authorization header中的不是用戶名密碼, 而是一個token。微軟的Skydrive就是使用這樣的方式