Basic Authentication:
step1:
用戶端以anonymouse驗證方式請求服務
step2:
伺服器接收到request後,在其Http header中指明其authentication mode,為basic authentication,從而要求用戶端提供有效credential, 其header 格式如所示,同時返回401給用戶端
step3:
用戶端接受到伺服器返回的response後,從其header中得知其authentication mode為basic authentication, 故在用戶端彈出相應對話方塊,要求輸入username&Password,形成有效client credential,並將該credential以明文的形式寫在http header中,傳送至server.
step4:
server接受到該request之後,從header中提取有效client credential,並對該credential進行有效性驗證。如果通過,則開始process the request.否則,返回401給用戶端。
Note:在對client credential中進行驗證時候,不一定需要domain environment。在IIS7中,我們可以自訂一個basic authentication module來進行credential的有效性驗證。
Digest Authentication
step1:
用戶端以anonymouse驗證方式請求服務
step2:
伺服器接收到request後,在其Http header中指明其authentication mode為Digest authentication,從而要求用戶端提供有效credential, 並指定對client提供的credential產生訊息摘要的演算法,如中所示為MD5演算法。其header 格式如所示,同時返回401給用戶端。
因此,Digest authentication是看不到client所提供的password,只能看到對其credential產生的訊息摘要,即使被截獲,這些對於第3方是毫無意義的。這樣相對於basic authentication的明文傳輸credential要安全多。
step3:
用戶端接受到伺服器返回的response後,從其header中得知其authentication mode為digest authentication, 故在用戶端彈出相應對話方塊,要求輸入username&Password,形成有效client credential,並將該credential通過訊息摘要機密演算法對其加密寫入http header,然後連同請求傳送至server.此時發送出去的包如所示:
step4:
server接受到該request之後,從header中提取有效client credential,並通過LDAP服務,串連至DC,尋找相應使用者名稱與摘要資訊匹配的domain user。如果找到,說明該 credential 有效,則開始process the request.否則,返回401給用戶端。
Integrated windows Authentication
step1:
用戶端以anonymouse驗證方式請求服務
step2:
伺服器接收到request後,在其Http header中指明其authentication mode為integrated windows authentication, 其header 格式如所示,同時返回401給用戶端。 integrated windows authentication有2種方式,分別為NTLM和kerberos驗證,而Negotiate方式實際為NTLM和Kerberos的Wrapper. 優先條件下使用kerberos驗證。
step3:
通過制定的Kerberos或者NTLM驗證模式,驗證客戶提供的TGS是否有效。如果通過,則處理該請求。否則,放回401