1. 程式人生 > >關於basic認證和digest認證的初步理解

關於basic認證和digest認證的初步理解

1.  basic認證是把使用者和密碼通過base64加密後傳送給伺服器進行驗證

2.  digest認證則是把伺服器響應的401訊息裡面的特定的值和使用者名稱以及密碼結合起來進行不可逆的摘要演算法運算得到一個值,然後把使用者名稱和這個摘要值發給伺服器,服務通過使用者名稱去 在自己本地找到對應的密碼,然後進行同樣的摘要運算,再比較這個值是否和客戶端發過來的摘要值一樣。

TTP協議規範的另一種認證模式是Digest模式,在HTTP1.1時被提出來,它主要是為了解決Basic模式安全問題,用於替代原來的Basic認證模式,Digest認證也是採用challenge/response認證模式,基本的認證流程比較類似,整個過程如下:

①瀏覽器傳送http報文請求一個受保護的資源。

②服務端的web容器將http響應報文的響應碼設為401,響應頭部比Basic模式複雜,WWW-Authenticate: Digest realm=”myTomcat”,qop="auth",nonce="xxxxxxxxxxx",opaque="xxxxxxxx" 。其中qop的auth表示鑑別方式;nonce是隨機字串;opaque服務端指定的值,客戶端需要原值返回。

③瀏覽器彈出對話方塊讓使用者輸入使用者名稱和密碼,瀏覽器對使用者名稱、密碼、nonce值、HTTP請求方法、被請求資源URI等組合後進行MD5運算,把計算得到的摘要資訊傳送給服務端。請求頭部類似如下,Authorization: Digest username="xxxxx",realm="myTomcat",qop="auth",nonce="xxxxx",uri="xxxx",cnonce="xxxxxx",nc=00000001,response="xxxxxxxxx",opaque="xxxxxxxxx" 。其中username是使用者名稱;cnonce是客戶端生成的隨機字串;nc是執行認證的次數;response就是最終計算得到的摘要。

④服務端web容器獲取HTTP報文頭部相關認證資訊,從中獲取到username,根據username獲取對應的密碼,同樣對使用者名稱、密碼、nonce值、HTTP請求方法、被請求資源URI等組合進行MD5運算,計算結果和response進行比較,如果匹配則認證成功並返回相關資源,否則再執行②,重新進行認證。

⑤以後每次訪問都要帶上認證頭部。

其實通過雜湊演算法對通訊雙方身份的認證十分常見,它的好處就是不必把具備密碼的資訊對外傳輸,只需將這些密碼資訊加入一個對方給定的隨機值計算雜湊值,最後將雜湊值傳給對方,對方就可以認證你的身份。Digest思想同樣採如此,用了一種nonce隨機數字符串,雙方約好對哪些資訊進行雜湊運算即可完成雙方身份的驗證。Digest模式避免了密碼在網路上明文傳輸,提高了安全性,但它仍然存在缺點,例如認證報文被攻擊者攔截到攻擊者可以獲取到資源