1. 定義
為了彌補BASIC不加密的缺點,DIGEST同樣适用質詢/響應的方式,但不會像BASIC直接發送明文,給對方的隻是相應摘要以及知訊碼産生的計算結果,是以比起BASIC認證,密碼洩露的可能性較小。
2. 步驟
step1.
請求需認證的資源時,伺服器會随着狀态碼401 Authorization Required,傳回帶 www-Authenticate首部字段的響應。該字段内包含質問響應方式認證所需的臨時質詢碼(随機數,nonce )。
- 首部字段www-Authenticate 内必須包含realm和 nonce這兩個字段的資訊。用戶端就是依靠向伺服器回送這兩個值進行認證的。
-
nonce
一種每次随傳回的401響應生成的任意随機字元串。該字元串通常推薦由Base64編碼的十六進制數的組成形式,但實際内容依賴伺服器的具體實作。
step2
接收到401狀态碼的用戶端,傳回的響應中包含DIGEST認證必須的首部字段Authorization資訊。 首部字段Authorization 内必須包含username、realm .nonce. uri和 response的字段資訊。
- realm和 nonce就是之前從伺服器接收到的響應中的字段。
- username是realm限定範圍内可進行認證的使用者名。
- uri ( digest-uri)即 Request-URI 的值,但考慮到繪代理轉發後Request-URI的值可能被修改,是以事先會複制一份副本儲存在uri内。
-
response 也可叫做Request-Digest,存放經過MD5運算後的密碼字元串,形成響應碼。
響應中其他的實體請參見第6章的請求首部字段Authorization。
step3
接收到包含首部字段Authorization請求的伺服器,會确認認證資訊的正确性。認證通過後則傳回包含Request-URI資源的響應。
并且這時會在首部字段Authentication-Info寫入一些認證成功的相關資訊。
3. 特點
- DIGEST認證提供了高于BASIC認證的安全等級,但是和HTTPS的用戶端認證相比仍舊很弱。
- DIGEST認證提供防止密碼被竊聽的保護機制,但并不存在防止使用者僞裝的保護機制。
- DIGEST認證和 BASIC認證一樣,使用上不那麼便捷靈活,且仍達不到多數Web 網站對高度安全等級的追求标準。是以它的适用範圍也有所受限。