HTTP認證方式

HTTP請求報頭: Authorization
HTTP響應報頭: WWW-Authenticate
 
HTTP認證  
基於「
質詢
/迴應(  
challenge/response)」的認證模式。
 
◆ 基本認證 basic authentication   ← HTTP1.0提出的認證方法

    客戶端對於每個realm,經過提供用戶名和密碼來進行認證的方式。
    ※ 包含密碼的明文傳遞
 
     基本認證步驟:
     1. 客戶端訪問一個受http基本認證保護的資源。
     2. 服務器返回401狀態,要求客戶端提供用戶名和密碼進行認證。
           401 Unauthorized
           WWW-Authenticate: Basic realm="WallyWorld"
     3. 客戶端將輸入的用戶名密碼用Base64進行編碼後,採用非加密的明文方式傳送給服務器。
           Authorization: Basic xxxxxxxxxx.
     4. 若是認證成功,則返回相應的資源。若是認證失敗,則仍返回401狀態,要求從新進行認證。
 
     特記事項
     1. Http是無狀態的,同一個客戶端對同一個realm內資源的每個訪問會被要求進行認證。
     2. 客戶端一般會緩存用戶名和密碼,並和authentication realm一塊兒保存,因此,通常不須要你從新輸入用戶名和密碼。
     3. 以非加密的明文方式傳輸,雖然轉換成了不易被人直接識別的字符串,可是沒法防止用戶名密碼被惡意盜用。
 
◆ 摘要認證 digest authentication   ← HTTP1.1提出的基本認證的替代方法

    服務器端以nonce進行質詢,客戶端以用戶名,密碼,nonce,HTTP方法,請求的URI等信息爲基礎產生的response信息進行認證的方式。
    ※ 不包含密碼的明文傳遞
    
     摘要認證步驟:
     1. 客戶端訪問一個受http摘要認證保護的資源。
     2. 服務器返回401狀態以及nonce等信息,要求客戶端進行認證。
HTTP/1.1 401 Unauthorized
WWW-Authenticate: Digest
realm="testrealm@host.com",
qop="auth,auth-int",
nonce="dcd98b7102dd2f0e8b11d0f600bfb0c093",
opaque="5ccc069c403ebaf9f0171e9517f40e41"
     3. 客戶端將以用戶名,密碼,nonce值,HTTP方法, 和被請求的URI爲校驗值基礎而加密(默認爲MD5算法)的摘要信息返回給服務器。
           認證必須的五個情報:
     ・ realm : 響應中包含信息
     ・ nonce : 響應中包含信息
     ・ username : 用戶名
     ・ digest-uri : 請求的URI
     ・ response : 以上面四個信息加上密碼信息,使用MD5算法得出的字符串。
Authorization: Digest 
username="Mufasa",  ← 客戶端已知信息
realm="testrealm@host.com",   ← 服務器端質詢響應信息
nonce="dcd98b7102dd2f0e8b11d0f600bfb0c093",  ← 服務器端質詢響應信息
uri="/dir/index.html", ← 客戶端已知信息
qop=auth,   ← 服務器端質詢響應信息
nc=00000001, ← 客戶端計算出的信息
cnonce="0a4f113b", ← 客戶端計算出的客戶端nonce
response="6629fae49393a05397450978507c4ef1", ← 最終的摘要信息 ha3
opaque="5ccc069c403ebaf9f0171e9517f40e41"  ← 服務器端質詢響應信息
     4. 若是認證成功,則返回相應的資源。若是認證失敗,則仍返回401狀態,要求從新進行認證。
 
     特記事項:
     1. 避免將密碼做爲明文在網絡上傳遞,相對提升了HTTP認證的安全性。
     2. 當用戶爲某個realm首次設置密碼時,服務器保存的是以用戶名,realm,密碼爲基礎計算出的哈希值(ha1),而非密碼自己。
     3. 若是qop=auth-int,在計算ha2時,除了包括HTTP方法,URI路徑外,還包括請求實體主體,從而防止PUT和POST請求表示被人篡改。
     4. 可是由於nonce自己能夠被用來進行摘要認證,因此也沒法確保認證後傳遞過來的數據的安全性。
 
   ※ nonce:隨機字符串,每次返回401響應的時候都會返回一個不一樣的nonce。 
   ※ nounce:隨機字符串,每一個請求都獲得一個不一樣的nounce。 
      ※ MD5(Message Digest algorithm 5,信息摘要算法)
         ① 用戶名:realm:密碼 ⇒ ha1
         ② HTTP方法:URI ⇒ ha2
         ③ ha1:nonce:nc:cnonce:qop:ha2 ⇒ ha3
 
◆ WSSE(WS-Security)認證  ← 擴展HTTP認證

   WSSE UsernameToken
    服務器端以nonce進行質詢,客戶端以用戶名,密碼,nonce,HTTP方法,請求的URI等信息爲基礎產生的response信息進行認證的方式。
    ※ 不包含密碼的明文傳遞
    
     WSSE認證步驟:
     1. 客戶端訪問一個受WSSE認證保護的資源。
     2. 服務器返回401狀態,要求客戶端進行認證。
HTTP/1.1 401 Unauthorized
WWW-Authenticate: WSSE
realm="testrealm@host.com",
profile="UsernameToken" ← 服務器指望你用UsernameToken規則生成迴應
※ UsernameToken規則:客戶端生成一個nonce,而後根據該nonce,密碼和當前日時來算出哈希值。
     3. 客戶端將生成一個nonce值,並以該nonce值,密碼,當前日時爲基礎,算出哈希值返回給服務器。
Authorization: WSSE profile="UsernameToken"
X-WSSE:UsernameToken
username="Mufasa",
PasswordDigest="Z2Y......",
Nonce="dcd98b7102dd2f0e8b11d0f600bfb0c093",
Created="2010-01-01T09:00:00Z"
     4. 若是認證成功,則返回相應的資源。若是認證失敗,則仍返回401狀態,要求從新進行認證。
 
     特記事項:
     1. 避免將密碼做爲明文在網絡上傳遞。
     2. 不須要在服務器端做設置。
     3. 服務器端必須保存密碼自己,不然沒法進行身份驗證。
相關文章
相關標籤/搜索