爲了彌補BASIC認證存在的弱點,從HTTP/1.1起就有了DIGEST認證。DIGEST認證一樣使用質詢/響應的方式(challenge/response),但不會像BASIC認證那樣直接發送明文密碼。web
所謂質詢響應方式是指,一開始一方會先發送認證要求給另外一方,接着使用從另外一方哪接收到的質詢碼計算生成響應碼。最後將響應嗎返回給對方進行認證的方式。安全
由於發送給對方的只是響應摘要及由質詢碼產生的計算結果,因此比起BASIC認證,密碼泄露的可能性就就下降了。服務器
DIGEST認證步驟網站
步驟1: 請求需認證資源時,服務器會隨着狀態碼401Authorization Required ,返回帶WWW-Authenticate首部字段的響應。該字段包含質問響應方式認證所需的臨時質詢碼(隨機數,nonce)。ui
首部字段WWW-Authenticate內必須包含realm和nonce這兩個字段的信息。客戶端就是依靠向服務器回送這兩個值進行認證。編碼
nonce是一種每次隨返回的401響應生成的任意隨機數字符串。該字符串一般推薦由Base64編碼的16進制數的組成形式,但實際內容依賴服務器的具體實現。3d
步驟2:接收到401狀態碼的客戶端,返回的響應包含DIGEST認證必須的首部字段Authorization信息。代理
首部字段Authorization內必須包含username、realm、nonce、uri和response的字段信息。其中,realm和nonce就是以前服務器接收到的響應中的字段。cdn
uesername就是realm限定範圍內可進行認證的用戶名。blog
uri(digest-uri)即Request-URI的值,但考慮到經代理轉發後Request-URL的值就可能被修改,所以會複製一份保存在uri內
response也可叫作Request-Digest,存放通過MD5運算後的密碼字符串,造成響應碼
步驟3: 接收到包含首部字段Authorization請求的服務器,會確認認證信息的正確性。認證經過後則返回包含Request-URI資源的響應。
而且這時會在首部字段Authenticate-Info寫入一些認證成功的相關信息。
DIGEST認證提供了高於BASIC認證的安全等級,可是和HTTPS的客戶端認證機制相比仍舊很弱。DIGEST認證提供防止密碼被竊聽的保護機制,但並不存在防止用戶假裝的保護機制。
DIGEST認證和BASIC認證同樣,使用上不是那麼便捷靈活,且達不到多數web網站對高度安全等級的追求標註。所以它的使用範圍也有所限制。