[轉]IIS的各類身份驗證詳細測試

本文轉自:http://www.cnblogs.com/chnking/archive/2007/11/20/965553.html#_Toc183326163html

1、    IIS的身份驗證概述算法

一、     匿名訪問數據庫

二、     集成windows身份驗證windows

2.1.    NTLM驗證瀏覽器

2.2.    Kerberos驗證安全

三、     基自己份驗證服務器

2、    匿名訪問網絡

3、    Windows集成驗證app

一、     NTLM驗證過程工具

1.1.    客戶端選擇NTLM方式

1.2.    服務端返回質詢碼

1.3.    客戶端加密質詢碼再次發送請求

1.4.    服務端驗證客戶端用戶和密碼

二、     Kerberos驗證過程

2.1.    客戶端選擇Kerberos驗證

2.2.    服務端驗證身份驗證票

三、     客戶端和服務器都不在域中

3.1.    客戶端用ip地址訪問服務

3.1.1.     客戶端IE申請頁面

3.1.2.     服務端返回無受權迴應

3.1.3.     客戶端選擇NTLM驗證,要求輸入用戶名密碼,請求質詢碼

3.1.4.     服務器返回質詢碼

3.1.5.     客戶端發送使用前面輸入帳戶的密碼加密後的質詢碼

3.1.6.     服務端驗證經過,返回資源

3.2.    客戶端用機器名訪問服務器,登陸用戶名/口令跟服務器不匹配

3.2.1.     客戶端IE申請頁面

3.2.2.     服務端返回無受權迴應

3.2.3.     客戶端選擇NTLM驗證,請求質詢碼

3.2.4.     服務器返回質詢碼

3.2.5.     客戶端發送用登錄本機的帳戶加密後的質詢碼

3.2.6.     服務端返回無受權迴應

3.2.7.     客戶端及選選擇NTLM驗證,要求輸入用戶名和口令,再次請求質詢碼

3.2.8.     服務端返回質詢碼

3.2.9.     客戶端發送使用前面輸入帳戶的密碼加密後的質詢碼

3.2.10.       服務端驗證經過,返回資源

3.3.    客戶端用機器名訪問服務器,登陸用戶名/口令跟服務器匹配

3.3.1.     客戶端IE申請頁面

3.3.2.     服務端返回無受權迴應

3.3.3.     客戶端選擇NTLM驗證,請求質詢碼

3.3.4.     服務器返回質詢碼

3.3.5.     客戶端發送用登錄本機的帳戶加密後的質詢碼

3.3.6.     服務端驗證經過,返回資源

四、     客戶端和服務器都在同一域中

4.1.    客戶端用機ip訪問服務器

4.1.1.     客戶端IE申請頁面

4.1.2.     服務端返回無受權迴應

4.1.3.     客戶端選擇NTLM驗證,要求輸入用戶名密碼,請求質詢碼

4.1.4.     服務器返回質詢碼

4.1.5.     客戶端發送使用前面輸入帳戶的密碼加密後的質詢碼

4.1.6.     服務端驗證經過,返回資源

4.2.    客戶端用機器名訪問服務器,客戶端用戶以域帳戶登陸

4.2.1.     客戶端IE申請頁面

4.2.2.     服務端返回無受權迴應

4.2.3.     客戶端選擇Kerberos驗證,發送驗證票到服務端

4.2.4.     服務端驗證經過,返回資源

4.3.    客戶端用機器名訪問服務器,客戶端用戶以客戶端本地用戶登陸,用戶名/口令跟服務器帳戶不匹配

4.3.1.     客戶端IE申請頁面

4.3.2.     服務端返回無受權迴應

4.3.3.     客戶端選擇NTLM驗證,請求質詢碼

4.3.4.     服務器返回質詢碼

4.3.5.     客戶端發送用登錄本機的帳戶加密後的質詢碼

4.3.6.     服務端返回無受權迴應

4.3.7.     客戶端及選選擇NTLM驗證,要求輸入用戶名和口令,再次請求質詢碼

4.3.8.     服務端返回質詢碼

4.3.9.     客戶端發送使用前面輸入帳戶的密碼加密後的質詢碼

4.3.10.       服務端驗證經過,返回資源

4.4.    客戶端用機器名訪問服務器,客戶端用戶以客戶端本地用戶登陸,用戶名/口令跟服務器帳戶匹配

4.4.1.     客戶端IE申請頁面

4.4.2.     服務端返回無受權迴應

4.4.3.     客戶端選擇NTLM驗證,請求質詢碼

4.4.4.     服務器返回質詢碼

4.4.5.     客戶端發送用登錄本機的帳戶加密後的質詢碼

4.4.6.     服務端驗證經過,返回資源

五、     集成驗證總結

5.1.    客戶端以ip地址訪問服務器

5.2.    服務器在域,客戶端以域賬號登錄

5.3.    其餘狀況IE都選擇採用NTLM驗證方式。

4、    基自己份驗證

一、     客戶端IE申請頁面

二、     服務端返回無受權迴應,並告知客戶端要求基自己份驗證

三、     客戶端彈出對話框要求輸入用戶名和密碼

四、     服務端驗證經過,返回資源

 

 

1、  IIS的身份驗證概述

IIS具備身份驗證功能,能夠有如下幾種驗證方式:

一、 匿名訪問

這種方式不驗證訪問用戶的身份,客戶端不須要提供任何身份驗證的憑據,服務端把這樣的訪問做爲匿名的訪問,並把這樣的訪問用戶都映射到一個服務端的帳戶,通常爲IUSER_MACHINE這個用戶,能夠修改映射到的用戶:

 

二、 集成windows身份驗證

這種驗證方式裏面也分爲兩種狀況

2.1.    NTLM驗證

這種驗證方式須要把用戶的用戶名和密碼傳送到服務端,服務端驗證用戶名和密碼是否和服務器的此用戶的密碼一致。用戶名用明碼傳送,可是密碼通過處理後派生出一個8字節的key加密質詢碼後傳送。

2.2.    Kerberos驗證

這種驗證方式只把客戶端訪問IIS的驗證票發送到IIS服務器,IIS收到這個票據就能肯定客戶端的身份,不須要傳送用戶的密碼。須要kerberos驗證的用戶必定是域用戶。

每個登陸用戶在登陸被驗證後都會被域中的驗證服務器生成一個票據受權票(TGT)做爲這個用戶訪問其餘服務所要驗證票的憑證(這是爲了實現一次登陸就能訪問域中全部須要驗證的資源的所謂單點登陸SSO功能),而訪問IIS服務器的驗證票是經過此用戶的票據受權票(TGT)向IIS獲取的。以後此客戶訪問此IIS都使用這個驗證票。一樣訪問其餘須要驗證的服務也是憑這個TGT獲取該服務的驗證票。

下面是kerberos比較詳細的原理。

Kerberos原理介紹:

工做站端運行着一個票據受權的服務,叫Kinit,專門用作工做站同認證服務器Kerberos間的身份認證的服務。

1.        用戶開始登陸,輸入用戶名,驗證服務器收到用戶名,在用戶數據庫中查找這個用戶,結果發現了這個用戶。

2.        驗證服務器生成一個驗證服務器跟這個登陸用戶之間共享的一個會話口令(Session key),這個口令只有驗證服務器跟這個登陸用戶之間使用,用來作相互驗證對方使用。同時驗證服務器給這個登陸用戶生成一個票據受權票(ticket-granting ticket),工做站之後就能夠憑這個票據受權票來向驗證服務器請求其餘的票據,而不用再次驗證本身的身份了。驗證服務器把{ Session key + ticket-granting ticket }用登陸用戶的口令加密後發回到工做站。

3.        工做站用本身的口令解密驗證服務器返回的數據包,若是解密正確則驗證成功。解密後可以得到登陸用戶與驗證服務器共享的Session key和一張ticket-granting ticket。

 

到此,登陸用戶沒有在網絡上發送口令,經過驗證服務器使用用戶口令加密驗證受權票的方法驗證了用戶,用戶跟驗證服務器之間創建了關係,在工做站上也保存來相應的身份證實,之後要是用網絡中的其餘服務,能夠經過這個身份證實向驗證服務器申請相應服務器的服務票,來得到相應服務身份驗證。

 

4.        若是用戶第一次訪問IIS服務器,工做站的kinit查看本機上沒有訪問IIS服務器的驗證票,因而kinit會向驗證服務器發出請求,請求訪問IIS服務的驗證票。Kinit先要生成一個驗證器,驗證器是這樣的:{用戶名:工做站地址}用跟驗證服務器間的Session key加密。Kinit將驗證器、票據受權票、你的名字、你的工做站地址、IIS服務名字發送的驗證服務器,驗證服務器驗證驗證受權票真實有效,而後用跟你共享的Session key解開驗證器,獲取其中的用戶名和地址,與發送這個請求的用戶和地址比較,若是相符,說明驗證經過,這個請求合法。

5.        驗證服務器先生成這個用戶跟IIS服務器之間的Session key會話口令,以後根據用戶請求生成IIS服務器的驗證票,是這個樣子的:{會話口令:用戶名:用戶機器地址:服務名:有效期:時間戳},這個驗證票用IIS服務器的密碼(驗證服務器知道全部受權服務的密碼)進行加密造成最終的驗證票。最後,驗證服務器{會話口令+加好密的驗證票}用用戶口令加密後發送給用戶。

6.        工做站收到驗證服務器返回的數據包,用本身的口令解密,得到跟IIS服務器的Session key和IIS服務器的驗證票。

7.        工做站kinit一樣要生成一個驗證器,驗證器是這樣的:{用戶名:工做站地址}用跟IIS服務器間的Session key加密。將驗證器和IIS驗證票一塊兒發送到IIS服務器。

8.        IIS服務器先用本身的服務器密碼解開IIS驗證票,若是解密成功,說明此驗證票真實有效,而後查看此驗證票是否在有效期內,在有效期內,用驗證票中帶的會話口令去解密驗證器,得到其中的用戶名和工做站地址,若是跟驗證票中的用戶名和地址相符則說明發送此驗證票的用戶就是驗證票的全部者,從而驗證本次請求有效。

三、 基自己份驗證

這種驗證方式徹底是把用戶名和明文用明文(通過base64編碼,可是base64編碼不是加密的,通過轉換就能轉換成原始的明文)傳送到服務端驗證。服務器直接驗證服務器本地是否用用戶跟客戶端提供的用戶名和密碼相匹配的,若是有則經過驗證。

 

2、  匿名訪問

服務端IIS設置了容許匿名訪問後,在收到客戶端的資源請求後,不須要通過身份驗證,直接把請求的資源返回給客戶端。

GET /iisstart.htm HTTP/1.1

Accept: */*

Accept-Language: zh-cn

UA-CPU: x86

Accept-Encoding: gzip, deflate

If-Modified-Since: Fri, 21 Feb 2003 12:15:52 GMT

If-None-Match: "0ce1f9a2d9c21:d87"

User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322; InfoPath.1; .NET CLR 2.0.50727; MAXTHON 2.0)

Host: 192.168.100.5

Connection: Keep-Alive

 

HTTP/1.1 200 OK

Content-Length: 1193

Content-Type: text/html

Last-Modified: Fri, 21 Feb 2003 12:15:52 GMT

Accept-Ranges: bytes

ETag: "0ce1f9a2d9c21:d8b"

Server: Microsoft-IIS/6.0

MicrosoftOfficeWebServer: 5.0_Pub

X-Powered-By: ASP.NET

Date: Mon, 12 Nov 2007 07:29:40 GMT

 

3、  Windows集成驗證

集成 Windows 身份驗證可使用 NTLM 或 Kerberos V5 身份驗證,當 Internet Explorer 試圖設爲集成驗證的IIS的資源時,IIS 發送兩個 WWW 身份驗證頭,Negotiate 和 NTLM。

客戶端IE認識Negotiate頭,將選擇Negotiate頭,以後IE能夠選擇NTLM 或 Kerberos兩種驗證方式。

若是客戶端不認識Negotiate頭,只能選擇NTLM頭,就只能使用NTLM驗證方式。

如今IE使用的版本通常都在5.0以上,因此如今能夠認爲IE客戶端都能識別Negotiate 頭。

因此本文只考慮IE接受Negotiate頭,分別使用NTLM 或 Kerberos兩種驗證的狀況。

 

一、 NTLM驗證過程

1.1.    客戶端選擇NTLM方式

若是IE選擇了NTLM驗證,IE就會在發送到IIS的請求中加入一個Authorization: Negotiate頭,內容爲:

Authorization: Negotiate NTLMSSPXXXXXXXXXXXXXXXXX

藍色部分在實際中是通過base64編碼的,其中「NTLMSSP」表示是NTLM驗證的請求,後面的「XXXXXXXX」部分是二進制的數據,告訴服務器,客戶端如今選擇了NTLM驗證,請服務器發送質詢碼給客戶端。

1.2.    服務端返回質詢碼

服務器在返回無受權訪問的http迴應的頭部加入Authorization: Negotiate頭,內容爲:

Authorization: Negotiate NTLMSSPXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

服務器返回的「XXXXXXXX」部分中含有一個八字節的質詢碼。

1.3.    客戶端加密質詢碼再次發送請求

客戶端使用客戶端賬號的密碼派生出來的8字節DESkey使用DES算法加密收到的質詢碼。連同客戶端賬號的用戶名發送到服務端,形式仍是這樣:

Authorization: Negotiate NTLMSSPXXXXXXXXXXXXXXXXX

這裏的「XXXXXXX」部分包含了加密後的質詢碼和客戶端用戶名,用戶名在其中以明碼形式存在。

1.4.    服務端驗證客戶端用戶和密碼

服務端收到用戶名後,先查驗本機是否有這個用戶,若是沒有直接返回沒有受權的http迴應。

若是有這個用戶,就用這個用戶的密碼派生出來的8字節DESkey使用DES算法加密發給客戶端的那個8字節的質詢碼,而後跟收到客戶端發送來的加密後的質詢碼比較,若是不相同,表示客戶端輸入密碼不正確看,返回沒有受權的http迴應;若是相同,就表示客戶端輸入這個用戶的密碼正確,驗證經過,返回客戶端請求的資源。

 

二、 Kerberos驗證過程

2.1.    客戶端選擇Kerberos驗證

若是客戶端選擇了Kerberos驗證,客戶端直接在請求頭中加入Authorization: Negotiate頭,內容爲:

Authorization: Negotiate XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

其中「XXXXXXXXXX」包含了客戶端登陸用戶的身份驗證票(登陸時域中的票據服務器發放的標識此登陸用戶身份的票據,其中不包含用戶的密碼)。

2.2.    服務端驗證身份驗證票

服務器驗證用戶驗證票,若是有效的票據,服務端能據此得到用戶的用戶名,並驗證用戶的有效性。驗證經過後,服務端返回客戶端請求的資源。

 

可是客戶端IE什麼時候選擇NTLM 、合適選擇Kerberos呢?下面經過一系列的測試來找出答案。

 

分服務器和客戶端在域不在域兩種狀況測試。

 

三、 客戶端和服務器都不在域中

測試環境爲服務器和客戶端機器在同一個局域網中,可是都不在域中。客戶端IE請求服務端IIS的一個頁面default.aspx。

IIS服務端設置:

l         不啓用匿名訪問

l         只啓用集成windows身份驗證

 

這個環境下又分爲下面幾種狀況:

3.1.    客戶端用ip地址訪問服務

3.1.1.    客戶端IE申請頁面

客戶端IE瀏覽器的地址欄上輸入要訪問的URL,就會向服務端發送一個GET請求:

GET /wstest/default.aspx HTTP/1.1

Accept: */*

Accept-Language: zh-cn

UA-CPU: x86

Accept-Encoding: gzip, deflate

User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; InfoPath.1; MAXTHON 2.0)

Host: 192.168.1.13:81

Connection: Keep-Alive

3.1.2.    服務端返回無受權迴應

服務端設置了禁用匿名訪問,只容許windows驗證,因此服務端返回了無受權迴應:

HTTP/1.1 401 Unauthorized

返回的http頭中還包括的:

WWW-Authenticate: Negotiate

WWW-Authenticate: NTLM

這兩個頭表示服務端只接受集成windows驗證方式

HTTP/1.1 401 Unauthorized

Content-Length: 1327

Content-Type: text/html

Server: Microsoft-IIS/6.0

WWW-Authenticate: Negotiate

WWW-Authenticate: NTLM

X-Powered-By: ASP.NET

Date: Sun, 11 Nov 2007 12:28:29 GMT

 

3.1.3.    客戶端選擇NTLM驗證,要求輸入用戶名密碼,請求質詢碼

客戶端經過Authorization: Negotiate NTLMSSPXXXX 頭告訴服務器,客戶端要求NTLM驗證,請求服務端發送質詢碼。

GET /wstest/default.aspx HTTP/1.1

Accept: */*

Accept-Language: zh-cn

UA-CPU: x86

Accept-Encoding: gzip, deflate

User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; InfoPath.1; MAXTHON 2.0)

Host: 192.168.1.13:81

Connection: Keep-Alive

Authorization: Negotiate TlRMTVNTUAABAAAAB4IIogAAAAAAAAAAAAAAAAAAAAAFAs4OAAAAD3==

 

3.1.4.    服務器返回質詢碼

服務端收到客戶端的請求,發送一個八字節的質詢碼。

HTTP/1.1 401 Unauthorized

Content-Length: 1251

Content-Type: text/html

Server: Microsoft-IIS/6.0

WWW-Authenticate: Negotiate TlRMTVNTUAACAAAAEgASADgAAAAFgoqii7rzphzu6mEAAAAAAAAAAFwAXABKAAAABQLODgAAAA9CAEkAWgBUAEEATABLAFIAMgACABIAQgBJAFoAVABBAEwASwBSADIAAQASAEIASQBaAFQAQQBMAEsAUgAyAAQAEgBiAGkAegB0AGEAbABrAFIAMgADABIAYgBpAHoAdABhAGwAawBSADIAAAAAAA==

X-Powered-By: ASP.NET

Date: Sun, 11 Nov 2007 12:29:44 GMT

 

3.1.5.    客戶端發送使用前面輸入帳戶的密碼加密後的質詢碼

客戶端IE收到質詢碼後,使用根據必定的規則從登陸用戶密碼派生出的8字節的key對質詢碼進行DES加密,加密後的質詢碼和用戶名明碼連同頁面請求一塊兒發送到服務端。

GET /wstest/default.aspx HTTP/1.1

Accept: */*

Accept-Language: zh-cn

UA-CPU: x86

Accept-Encoding: gzip, deflate

User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; InfoPath.1; MAXTHON 2.0)

Host: 192.168.1.13:81

Connection: Keep-Alive

Authorization: Negotiate TlRMTVNTUAADAAAAGAAYAI4AAAAYABgApgAAABgAGABIAAAAGgAaAGAAAAAUABQAegAAAAAAAAC+AAAABYKIogUCzg4AAAAPMQA5ADIALgAxADYAOAAuADEALgAxADMAYQBkAG0AaQBuAGkAcwB0AHIAYQB0AG8AcgBXAEkATgAyADAAMAAzAC0AUABDAL0amMkkEMWLAAAAAAAAAAAAAAAAAAAAAFND1Boc0kthz0TBnfxn3z4W9/NILU1CtW==

 

3.1.6.    服務端驗證經過,返回資源

服務端收到用戶名和加密後的質詢碼後,根據用戶名查找服務器上此用戶的密碼,按照客戶端一樣的方法加密質詢碼,而後跟收到客戶端返回的質詢碼,若是一致,則說明用戶名和密碼都一致,驗證經過,返回客戶端IE請求資源。若是不對,再次返回無受權http迴應。

HTTP/1.1 200 OK

Date: Sun, 11 Nov 2007 12:29:44 GMT

Server: Microsoft-IIS/6.0

X-Powered-By: ASP.NET

X-AspNet-Version: 2.0.50727

Cache-Control: private

Content-Type: text/html; charset=utf-8

Content-Length: 522

 

 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

 

<html xmlns="http://www.w3.org/1999/xhtml" >

<head><title>

.Untitled Page

</title></head>

<body>

    <form name="form1" method="post" action="default.aspx" id="form1">

<div>

<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUJNzgzNDMwNTMzZGTcefU2sz1MLsbXiZdUEXomIyZ20Q==" />

</div>

 

    <div>

        This is a simple page!</div>

    </form>

</body>

</html>

 

3.2.    客戶端用機器名訪問服務器,登陸用戶名/口令跟服務器不匹配

這種狀況,客戶端用服務器名訪問服務器,可是客戶端登陸系統的用戶跟服務器上的用戶名和密碼不匹配,也就是要麼服務器上沒這個用戶,要麼就是服務器這個用戶的密碼跟客戶端這個用戶的密碼不同。

3.2.1.    客戶端IE申請頁面

GET /wstest/default.aspx HTTP/1.1

Accept: */*

Accept-Language: zh-cn

UA-CPU: x86

Accept-Encoding: gzip, deflate

User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; InfoPath.1; MAXTHON 2.0)

Host: biztalkr2:81

Connection: Keep-Alive

3.2.2.    服務端返回無受權迴應

服務端不容許匿名訪問,服務端返回須要集成驗證的的http頭。

HTTP/1.1 401 Unauthorized

Content-Length: 1327

Content-Type: text/html

Server: Microsoft-IIS/6.0

WWW-Authenticate: Negotiate

WWW-Authenticate: NTLM

X-Powered-By: ASP.NET

Date: Wed, 14 Nov 2007 12:38:36 GMT

3.2.3.    客戶端選擇NTLM驗證,請求質詢碼

GET /wstest/default.aspx HTTP/1.1

Accept: */*

Accept-Language: zh-cn

UA-CPU: x86

Accept-Encoding: gzip, deflate

User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; InfoPath.1; MAXTHON 2.0)

Host: biztalkr2:81

Connection: Keep-Alive

Authorization: Negotiate TlRMTVNTUAABAAAAB4IIogAAAAAAAAAAAAAAAAAAAAAFAs4OAAAADw==

3.2.4.    服務器返回質詢碼

HTTP/1.1 401 Unauthorized

Content-Length: 1251

Content-Type: text/html

Server: Microsoft-IIS/6.0

WWW-Authenticate: Negotiate TlRMTVNTUAACAAAAEgASADgAAAAFgoqikemftrQx0qUAAAAAAAAAAFwAXABKAAAABQLODgAAAA9CAEkAWgBUAEEATABLAFIAMgACABIAQgBJAFoAVABBAEwASwBSADIAAQASAEIASQBaAFQAQQBMAEsAUgAyAAQAEgBiAGkAegB0AGEAbABrAFIAMgADABIAYgBpAHoAdABhAGwAawBSADIAAAAAAA==

X-Powered-By: ASP.NET

Date: Wed, 14 Nov 2007 12:38:36 GMT

3.2.5.    客戶端發送用登錄本機的帳戶加密後的質詢碼

客戶端IE首先用本機登陸用戶的密碼派生的key加密質詢碼,而後連同用戶名一塊兒發送到服務端驗證。

GET /wstest/default.aspx HTTP/1.1

Accept: */*

Accept-Language: zh-cn

UA-CPU: x86

Accept-Encoding: gzip, deflate

User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; InfoPath.1; MAXTHON 2.0)

Host: biztalkr2:81

Connection: Keep-Alive

Authorization: Negotiate TlRMTVNTUAADAAAAGAAYAIoAAAAYABgAogAAABQAFABIAAAAGgAaAFwAAAAUABQAdgAAAAAAAAC6AAAABYKIogUCzg4AAAAPVwBJAE4AMgAwADAAMwAtAFAAQwBBAGQAbQBpAG4AaQBzAHQAcgBhAHQAbwByAFcASQBOADIAMAAwADMALQBQAEMAwo4jxECJeUwAAAAAAAAAAAAAAAAAAAAA2/kscwhI0mmAC6W4OmsZjbrRyrS2NGUX

3.2.6.    服務端返回無受權迴應

客戶端本機登陸的用戶名和密碼跟服務器端沒有匹配的,因此驗證在服務端沒有經過,服務端返回無受權的迴應。

HTTP/1.1 401 Unauthorized

Content-Length: 1251

Content-Type: text/html

Server: Microsoft-IIS/6.0

WWW-Authenticate: Negotiate

WWW-Authenticate: NTLM

X-Powered-By: ASP.NET

Date: Wed, 14 Nov 2007 12:38:36 GMT

 

3.2.7.    客戶端及選選擇NTLM驗證,要求輸入用戶名和口令,再次請求質詢碼

GET /wstest/default.aspx HTTP/1.1

Accept: */*

Accept-Language: zh-cn

UA-CPU: x86

Accept-Encoding: gzip, deflate

User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; InfoPath.1; MAXTHON 2.0)

Host: biztalkr2:81

Connection: Keep-Alive

Authorization: Negotiate TlRMTVNTUAABAAAAB4IIogAAAAAAAAAAAAAAAAAAAAAFAs4OAAAADw==

3.2.8.    服務端返回質詢碼

HTTP/1.1 401 Unauthorized

Content-Length: 1251

Content-Type: text/html

Server: Microsoft-IIS/6.0

WWW-Authenticate: Negotiate TlRMTVNTUAACAAAAEgASADgAAAAFgoqi3GHiM9qD6TUAAAAAAAAAAFwAXABKAAAABQLODgAAAA9CAEkAWgBUAEEATABLAFIAMgACABIAQgBJAFoAVABBAEwASwBSADIAAQASAEIASQBaAFQAQQBMAEsAUgAyAAQAEgBiAGkAegB0AGEAbABrAFIAMgADABIAYgBpAHoAdABhAGwAawBSADIAAAAAAA==

X-Powered-By: ASP.NET

Date: Wed, 14 Nov 2007 12:38:45 GMT

3.2.9.    客戶端發送使用前面輸入帳戶的密碼加密後的質詢碼

GET /wstest/default.aspx HTTP/1.1

Accept: */*

Accept-Language: zh-cn

UA-CPU: x86

Accept-Encoding: gzip, deflate

User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; InfoPath.1; MAXTHON 2.0)

Host: biztalkr2:81

Connection: Keep-Alive

Authorization: Negotiate TlRMTVNTUAADAAAAGAAYAIgAAAAYABgAoAAAABIAEgBIAAAAGgAaAFoAAAAUABQAdAAAAAAAAAC4AAAABYKIogUCzg4AAAAPQgBJAFoAVABBAEwASwBSADIAYQBkAG0AaQBuAGkAcwB0AHIAYQB0AG8AcgBXAEkATgAyADAAMAAzAC0AUABDAKeYMtcyzwKJAAAAAAAAAAAAAAAAAAAAAExqwTipbr+IzohNdmnopPU1B9pp7QBplA==

3.2.10.     服務端驗證經過,返回資源

HTTP/1.1 200 OK

Date: Wed, 14 Nov 2007 12:38:45 GMT

Server: Microsoft-IIS/6.0

X-Powered-By: ASP.NET

X-AspNet-Version: 2.0.50727

Cache-Control: private

Content-Type: text/html; charset=utf-8

Content-Length: 522

 

 

 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

 

<html xmlns="http://www.w3.org/1999/xhtml" >

<head><title>

.Untitled Page

</title></head>

<body>

    <form name="form1" method="post" action="default.aspx" id="form1">

<div>

<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUJNzgzNDMwNTMzZGTcefU2sz1MLsbXiZdUEXomIyZ20Q==" />

</div>

 

    <div>

        This is a simple page!</div>

    </form>

</body>

</html>

3.3.    客戶端用機器名訪問服務器,登陸用戶名/口令跟服務器匹配

這種狀況,客戶端用服務器名訪問服務器,並且客戶端登陸系統的用戶正好在服務器上有個同名同密碼的用戶。

3.3.1.    客戶端IE申請頁面

GET /wstest/default.aspx HTTP/1.1

Accept: */*

Accept-Language: zh-cn

UA-CPU: x86

Accept-Encoding: gzip, deflate

User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; InfoPath.1; MAXTHON 2.0)

Host: biztalkr2:81

Connection: Keep-Alive

3.3.2.    服務端返回無受權迴應

一樣,服務端不容許匿名訪問,服務端返回須要集成驗證的的http頭。

HTTP/1.1 401 Unauthorized

Content-Length: 1327

Content-Type: text/html

Server: Microsoft-IIS/6.0

WWW-Authenticate: Negotiate

WWW-Authenticate: NTLM

X-Powered-By: ASP.NET

Date: Wed, 14 Nov 2007 12:35:41 GMT

3.3.3.    客戶端選擇NTLM驗證,請求質詢碼

GET /wstest/default.aspx HTTP/1.1

Accept: */*

Accept-Language: zh-cn

UA-CPU: x86

Accept-Encoding: gzip, deflate

User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; InfoPath.1; MAXTHON 2.0)

Host: biztalkr2:81

Connection: Keep-Alive

Authorization: Negotiate TlRMTVNTUAABAAAAB4IIogAAAAAAAAAAAAAAAAAAAAAFAs4OAAAADw==

3.3.4.    服務器返回質詢碼

HTTP/1.1 401 Unauthorized

Content-Length: 1251

Content-Type: text/html

Server: Microsoft-IIS/6.0

WWW-Authenticate: Negotiate TlRMTVNTUAACAAAAEgASADgAAAAFgoqiSWLtzjLMElAAAAAAAAAAAFwAXABKAAAABQLODgAAAA9CAEkAWgBUAEEATABLAFIAMgACABIAQgBJAFoAVABBAEwASwBSADIAAQASAEIASQBaAFQAQQBMAEsAUgAyAAQAEgBiAGkAegB0AGEAbABrAFIAMgADABIAYgBpAHoAdABhAGwAawBSADIAAAAAAA==

X-Powered-By: ASP.NET

Date: Wed, 14 Nov 2007 12:35:41 GMT

3.3.5.    客戶端發送用登錄本機的帳戶加密後的質詢碼

GET /wstest/default.aspx HTTP/1.1

Accept: */*

Accept-Language: zh-cn

UA-CPU: x86

Accept-Encoding: gzip, deflate

User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; InfoPath.1; MAXTHON 2.0)

Host: biztalkr2:81

Connection: Keep-Alive

Authorization: Negotiate TlRMTVNTUAADAAAAGAAYAIoAAAAYABgAogAAABQAFABIAAAAGgAaAFwAAAAUABQAdgAAAAAAAAC6AAAABYKIogUCzg4AAAAPVwBJAE4AMgAwADAAMwAtAFAAQwBBAGQAbQBpAG4AaQBzAHQAcgBhAHQAbwByAFcASQBOADIAMAAwADMALQBQAEMAg7v6JYS/3bAAAAAAAAAAAAAAAAAAAAAArE2xu3xDN3w0LmV1yUkDkrqVWhb2wg27

3.3.6.    服務端驗證經過,返回資源

用戶端登陸的用戶名和密碼正好能匹配到服務端的一個用戶和密碼,驗證經過。

HTTP/1.1 200 OK

Date: Wed, 14 Nov 2007 12:35:41 GMT

Server: Microsoft-IIS/6.0

X-Powered-By: ASP.NET

X-AspNet-Version: 2.0.50727

Cache-Control: private

Content-Type: text/html; charset=utf-8

Content-Length: 522

 

 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

 

<html xmlns="http://www.w3.org/1999/xhtml" >

<head><title>

.Untitled Page

</title></head>

<body>

    <form name="form1" method="post" action="default.aspx" id="form1">

<div>

<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUJNzgzNDMwNTMzZGTcefU2sz1MLsbXiZdUEXomIyZ20Q==" />

</div>

 

    <div>

        This is a simple page!</div>

    </form>

</body>

</html>

 

四、 客戶端和服務器都在同一域中

服務器和客戶端機器在同一個局域網中,並同在一個域中。客戶端IE請求服務端IIS的一個頁面iisstart.htm。

IIS服務端設置:

l         不啓用匿名訪問

l         只啓用集成windows身份驗證

 

這樣的環境下又範圍如下幾種狀況:

4.1.    客戶端用機ip訪問服務器

4.1.1.    客戶端IE申請頁面

GET /iisstart.htm HTTP/1.1

Accept: */*

Accept-Language: zh-cn

UA-CPU: x86

Accept-Encoding: gzip, deflate

User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322; InfoPath.1; .NET CLR 2.0.50727; MAXTHON 2.0)

Host: 192.168.100.5:81

Connection: Keep-Alive

4.1.2.    服務端返回無受權迴應

IIS的設置不容許匿名訪問,只能windows驗證,因此發送401無受權迴應,同時發回Negotiate和NTLM兩個身份驗證頭讓客戶端選擇。

HTTP/1.1 401 Unauthorized

Content-Length: 1327

Content-Type: text/html

Server: Microsoft-IIS/6.0

WWW-Authenticate: Negotiate

WWW-Authenticate: NTLM

X-Powered-By: ASP.NET

Date: Wed, 14 Nov 2007 07:23:43 GMT

4.1.3.    客戶端選擇NTLM驗證,要求輸入用戶名密碼,請求質詢碼

因爲使用的是ip地址訪問服務器,URL中包含有」.」字符,IE認爲訪問的不是企業內部服務器,因此不直接提供用戶憑據給服務端,要求用戶輸入賬戶

GET /iisstart.htm HTTP/1.1

Accept: */*

Accept-Language: zh-cn

UA-CPU: x86

Accept-Encoding: gzip, deflate

User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322; InfoPath.1; .NET CLR 2.0.50727; MAXTHON 2.0)

Host: 192.168.100.5:81

Connection: Keep-Alive

Authorization: Negotiate TlRMTVNTUAABAAAAB4IIogAAAAAAAAAAAAAAAAAAAAAFAs4OAAAAD4==

4.1.4.    服務器返回質詢碼

HTTP/1.1 401 Unauthorized

Content-Length: 1251

Content-Type: text/html

Server: Microsoft-IIS/6.0

WWW-Authenticate: Negotiate TlRMTVNTUAACAAAACgAKADgAAAAFgomiF0CRjzLrr+cAAAAAAAAAAHwAfABCAAAABQLODgAAAA9TAFoAQgBUAEkAAgAKAFMAWgBCAFQASQABAAgATABPAEcAUwAEABgAcwB6AGIAdABpAC4AZwBvAHYALgBjAG4AAwAiAGwAbwBnAHMALgBzAHoAYgB0AGkALgBnAG8AdgAuAGMAbgAFABgAcwB6AGIAdABpAC4AZwBvAHYALgBjAG4AAAAAAA==

X-Powered-By: ASP.NET

Date: Wed, 14 Nov 2007 07:24:15 GMT

4.1.5.    客戶端發送使用前面輸入帳戶的密碼加密後的質詢碼

GET /iisstart.htm HTTP/1.1

Accept: */*

Accept-Language: zh-cn

UA-CPU: x86

Accept-Encoding: gzip, deflate

User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322; InfoPath.1; .NET CLR 2.0.50727; MAXTHON 2.0)

Host: 192.168.100.5:81

Connection: Keep-Alive

Authorization: Negotiate TlRMTVNTUAADAAAAGAAYAHYAAAAYABgAjgAAABoAGgBIAAAACgAKAGIAAAAKAAoAbAAAAAAAAACmAAAABYKIogUCzg4AAAAPMQA5ADIALgAxADYAOAAuADEAMAAwAC4ANQBqAGkAbgBqAHoASgBJAE4ASgBaALVaV8Ku0ERuAAAAAAAAAAAAAAAAAAAAAFowQcbaUXykWTrI7WJKQUA2taaV7wo5T2==

4.1.6.    服務端驗證經過,返回資源

HTTP/1.1 200 OK

Content-Length: 1135

Content-Type: text/html

Last-Modified: Mon, 12 Nov 2007 09:33:27 GMT

Accept-Ranges: bytes

ETag: "d4469314f25c81:e35"

Server: Microsoft-IIS/6.0

X-Powered-By: ASP.NET

Date: Wed, 14 Nov 2007 07:24:15 GMT

 

<html>

 

<head>

<meta HTTP-EQUIV="Content-Type" Content="text/html; charset=gb2312">

 

</head>

 

<body bgcolor=white>

This is a simple page!

 

</body>

</html>

 

4.2.    客戶端用機器名訪問服務器,客戶端用戶以域帳戶登陸

4.2.1.    客戶端IE申請頁面

GET /iisstart.htm HTTP/1.1

Accept: */*

Accept-Language: zh-cn

UA-CPU: x86

Accept-Encoding: gzip, deflate

User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322; InfoPath.1; .NET CLR 2.0.50727; MAXTHON 2.0)

Host: logs:81

Connection: Keep-Alive

4.2.2.    服務端返回無受權迴應

HTTP/1.1 401 Unauthorized

Content-Length: 1327

Content-Type: text/html

Server: Microsoft-IIS/6.0

WWW-Authenticate: Negotiate

WWW-Authenticate: NTLM

X-Powered-By: ASP.NET

Date: Wed, 14 Nov 2007 08:27:18 GMT

4.2.3.    客戶端選擇Kerberos驗證,發送驗證票到服務端

客戶端在域中,而且以域帳戶登陸,因此客戶端IE選擇使用Kerberos身份驗證,發送與用戶的驗證票到服務端。

GET /iisstart.htm HTTP/1.1

Accept: */*

Accept-Language: zh-cn

UA-CPU: x86

Accept-Encoding: gzip, deflate

User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322; InfoPath.1; .NET CLR 2.0.50727; MAXTHON 2.0)

Host: logs:81

Connection: Keep-Alive

Authorization: Negotiate YIIEzQYGKwYBBQUCoIIEwTCCBL2gJDAiBgkqhkiC9xIBAgIGCSqGSIb3EgECAgYKKwYBBAGCNwICCqKCBJMEggSPYIIEiwYJKoZIhvcSAQICAQBuggR6MIIEdqADAgEFoQMCAQ6iBwMFACAAAACjggOiYYIDnjCCA5qgAwIBBaEOGwxTWkJUSS5HT1YuQ06iFzAVoAMCAQKhDjAMGwRIVFRQGwRsb2dzo4IDaDCCA2SgAwIBF6EDAgEMooIDVgSCA1IeN8fZeLtzkw+5H8HOKmM8zgDOVL5GmeXoS8dMgE20RtI14EVWWZLn2j0AMXTqMOA550Grsadh89vZ89+6vprkVL0v49FM+gxHFCmZSOvLTIawBqXvLU6w1Pni8PN1pbhOKCRVON6+5XH4MN8Rfuqpyy1A/2gfeQIfLMMHs73yohp7h7QJP29b61jm0vj1xE0jEP7EupHlr225vrrVCnktTksbyqi88kIZlCB84J1gTqYoNeOycn4Qzvv8x6z1AsCfo2SBSwo1tj38BK2Fbu+BRXw26RrebGWPkILYwqED7bSR+RlDdokEhjubbyaWcnIjiSXZaN5kQqZQqms3iqhUrZpX7RaaV5BsMOgJs7LwYmc3uM5v7YqljwFD3T44XfpAiS3xlyirP3modOR1l+hV2xdIIFusXtRzY7rTkmEb2F3dGjTiMXySrc0GGhe3TrIeH9nB/2Udo/Z9m0ifXC0EU2fFogefmDc322vHhhv9gEYccG44Q/cnWx8gY9GfWCRihlaefGK+DmCvm+515UFYeIcG5KafXBQw3KX7MjI4/4hlAh3mQNn9p3nX0ePy1G1RRV2SToN7eg1PkaaYXDeC6MSIwCb53MfebzpyN0LKzmPZ6GneLYbyBIpANzPNoXz/LADA1h/l8F098ti1fThPVkUgoehgy1iyovTXyqJg6rojI0juIH7fKfc/UpfO+eLMhsquhH1KNjkCTD2CkdUfcsEU7B15j15p1OyGeg5/tEbRE67+NAWkfLSPp5R3tzGqjAh39w8n/8EWot9DBlHwk+qJp3rMFJZIvNtmXuvqnUW1NGpO1GIf78PBixyFwrJSo5syTfCiWIcw9YQ7MyvuyynAmsXeaI5+OP/GfmGpnvt5kMznu5q/nNf7LMV8n6x2+lmNlcPJiWr+KckPM9Nvntw2h/bl2qGnHDdOqNYI2N0VxzIm8wY6dWS3NIwlGl/usMjjebaELFP6rdHjpVG6pziJYjrBrws5DbqCxJ1EOeQdBiT8l1O6OUQqdOBVZH6/bj5MkLghWv0edHG8TJ4OGa69nMHDwTBOyuyRbTr5uWWFnESdyAGGbfGlJjuvSSzxgZViMSB2j8Ulk8x8MCqrupEK2i0UR6HrMNMJIDJsVcXTpIG6MIG3oAMCAReiga8EgazteAbcguseBpQnHeJihLFO78PfjI2Qop+MkH9jCOrvO9cQns1GzOKByoAbeP307QQq4zbaDF3EJlOC//4k4A6W4dc4k5lNeOgwR4LEvbIQKpdlljFiW8XUb+IgovsOlZEG0qFQgZY0I35I4Uvk/2dDkz06DGiDsQ0IENrRIMT4/7xgMSmkzspO2ojSbG5aKlbjK203QxMlkEoxb8WpJFZQggUqrLAr0q2graET

4.2.4.    服務端驗證經過,返回資源

HTTP/1.1 200 OK

Content-Length: 167

Content-Type: text/html

Last-Modified: Wed, 14 Nov 2007 08:21:24 GMT

Accept-Ranges: bytes

ETag: "bf2d54589726c81:e35"

Server: Microsoft-IIS/6.0

X-Powered-By: ASP.NET

WWW-Authenticate: Negotiate oYGgMIGdoAMKAQChCwYJKoZIgvcSAQICooGIBIGFYIGCBgkqhkiG9xIBAgICAG9zMHGgAwIBBaEDAgEPomUwY6ADAgEXolwEWrdYWb37ROEMMnP/4vTBwSe9hVe4XklXCWqFKG16d53aBUiTEem+lrFE8ycBgSln3zme63lKfSn9UHoNTlT100T86wxllsyrrMe437ElPcxI4pgcv9rNKU9aKg==

Date: Wed, 14 Nov 2007 08:27:18 GMT

 

<html>

 

<head>

<meta HTTP-EQUIV="Content-Type" Content="text/html; charset=gb2312">

 

</head>

 

<body bgcolor=white>

This is a simple page!

 

</body>

</html>

 

4.3.    客戶端用機器名訪問服務器,客戶端用戶以客戶端本地用戶登陸,用戶名/口令跟服務器帳戶不匹配

4.3.1.    客戶端IE申請頁面

GET /iisstart.htm HTTP/1.1

Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, application/x-silverlight, */*

Accept-Language: zh-cn

UA-CPU: x86

Accept-Encoding: gzip, deflate

User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322; InfoPath.1; .NET CLR 2.0.50727)

Host: logs:81

Connection: Keep-Alive

4.3.2.    服務端返回無受權迴應

HTTP/1.1 401 Unauthorized

Content-Length: 1327

Content-Type: text/html

Server: Microsoft-IIS/6.0

WWW-Authenticate: Negotiate

WWW-Authenticate: NTLM

X-Powered-By: ASP.NET

Date: Wed, 14 Nov 2007 08:58:13 GMT

4.3.3.    客戶端選擇NTLM驗證,請求質詢碼

GET /iisstart.htm HTTP/1.1

Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, application/x-silverlight, */*

Accept-Language: zh-cn

UA-CPU: x86

Accept-Encoding: gzip, deflate

User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322; InfoPath.1; .NET CLR 2.0.50727)

Host: logs:81

Connection: Keep-Alive

Authorization: Negotiate TlRMTVNTUAABAAAAB4IIogAAAAAAAAAAAAAAAAAAAAAFAs4OAAAADw==

4.3.4.    服務器返回質詢碼

HTTP/1.1 401 Unauthorized

Content-Length: 1251

Content-Type: text/html

Server: Microsoft-IIS/6.0

WWW-Authenticate: Negotiate TlRMTVNTUAACAAAACgAKADgAAAAFgomibnmMcRgPlTMAAAAAAAAAAHwAfABCAAAABQLODgAAAA9TAFoAQgBUAEkAAgAKAFMAWgBCAFQASQABAAgATABPAEcAUwAEABgAcwB6AGIAdABpAC4AZwBvAHYALgBjAG4AAwAiAGwAbwBnAHMALgBzAHoAYgB0AGkALgBnAG8AdgAuAGMAbgAFABgAcwB6AGIAdABpAC4AZwBvAHYALgBjAG4AAAAAAA==

X-Powered-By: ASP.NET

Date: Wed, 14 Nov 2007 08:58:13 GMT

4.3.5.    客戶端發送用登錄本機的帳戶加密後的質詢碼

GET /iisstart.htm HTTP/1.1

Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, application/x-silverlight, */*

Accept-Language: zh-cn

UA-CPU: x86

Accept-Encoding: gzip, deflate

User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322; InfoPath.1; .NET CLR 2.0.50727)

Host: logs:81

Connection: Keep-Alive

Authorization: Negotiate TlRMTVNTUAADAAAAGAAYAHYAAAAYABgAjgAAAAoACgBIAAAAGgAaAFIAAAAKAAoAbAAAAAAAAACmAAAABYKIogUCzg4AAAAPSgBJAE4ASgBaAEEAZABtAGkAbgBpAHMAdAByAGEAdABvAHIASgBJAE4ASgBaACY8afODxKsFAAAAAAAAAAAAAAAAAAAAAPfRbw7FX9gKolM+6+QhqsRU+MWS3jKLkQ==

4.3.6.    服務端返回無受權迴應

HTTP/1.1 401 Unauthorized

Content-Length: 1251

Content-Type: text/html

Server: Microsoft-IIS/6.0

WWW-Authenticate: Negotiate

WWW-Authenticate: NTLM

X-Powered-By: ASP.NET

Date: Wed, 14 Nov 2007 08:58:13 GMT

4.3.7.    客戶端及選選擇NTLM驗證,要求輸入用戶名和口令,再次請求質詢碼

GET /iisstart.htm HTTP/1.1

Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, application/x-silverlight, */*

Accept-Language: zh-cn

UA-CPU: x86

Accept-Encoding: gzip, deflate

User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322; InfoPath.1; .NET CLR 2.0.50727)

Host: logs:81

Connection: Keep-Alive

Authorization: Negotiate TlRMTVNTUAABAAAAB4IIogAAAAAAAAAAAAAAAAAAAAAFAs4OAAAADw==

4.3.8.    服務端返回質詢碼

HTTP/1.1 401 Unauthorized

Content-Length: 1251

Content-Type: text/html

Server: Microsoft-IIS/6.0

WWW-Authenticate: Negotiate TlRMTVNTUAACAAAACgAKADgAAAAFgomi3CZKUW4302QAAAAAAAAAAHwAfABCAAAABQLODgAAAA9TAFoAQgBUAEkAAgAKAFMAWgBCAFQASQABAAgATABPAEcAUwAEABgAcwB6AGIAdABpAC4AZwBvAHYALgBjAG4AAwAiAGwAbwBnAHMALgBzAHoAYgB0AGkALgBnAG8AdgAuAGMAbgAFABgAcwB6AGIAdABpAC4AZwBvAHYALgBjAG4AAAAAAA==

X-Powered-By: ASP.NET

Date: Wed, 14 Nov 2007 08:59:09 GMT

4.3.9.    客戶端發送使用前面輸入帳戶的密碼加密後的質詢碼

GET /iisstart.htm HTTP/1.1

Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, application/x-silverlight, */*

Accept-Language: zh-cn

UA-CPU: x86

Accept-Encoding: gzip, deflate

User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322; InfoPath.1; .NET CLR 2.0.50727)

Host: logs:81

Connection: Keep-Alive

Authorization: Negotiate TlRMTVNTUAADAAAAGAAYAHYAAAAYABgAjgAAAAoACgBIAAAAGgAaAFIAAAAKAAoAbAAAAAAAAACmAAAABYKIogUCzg4AAAAPSgBJAE4ASgBaAGEAZABtAGkAbgBpAHMAdAByAGEAdABvAHIASgBJAE4ASgBaAIP0UwZaV4tAAAAAAAAAAAAAAAAAAAAAAMS9l9MtVOFPSz/JmjD+/7W2ssAdBrkvwQ==

4.3.10.     服務端驗證經過,返回資源

HTTP/1.1 200 OK

Content-Length: 167

Content-Type: text/html

Last-Modified: Wed, 14 Nov 2007 08:21:24 GMT

Accept-Ranges: bytes

ETag: "bf2d54589726c81:e35"

Server: Microsoft-IIS/6.0

X-Powered-By: ASP.NET

Date: Wed, 14 Nov 2007 08:59:09 GMT

 

<html>

 

<head>

<meta HTTP-EQUIV="Content-Type" Content="text/html; charset=gb2312">

 

</head>

 

<body bgcolor=white>

This is a simple page!

 

</body>

</html>

 

4.4.    客戶端用機器名訪問服務器,客戶端用戶以客戶端本地用戶登陸,用戶名/口令跟服務器帳戶匹配

4.4.1.    客戶端IE申請頁面

GET /iisstart.htm HTTP/1.1

Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, application/x-silverlight, */*

Accept-Language: zh-cn

UA-CPU: x86

Accept-Encoding: gzip, deflate

User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322; InfoPath.1; .NET CLR 2.0.50727)

Host: logs:81

Connection: Keep-Alive

4.4.2.    服務端返回無受權迴應

HTTP/1.1 401 Unauthorized

Content-Length: 1327

Content-Type: text/html

Server: Microsoft-IIS/6.0

WWW-Authenticate: Negotiate

WWW-Authenticate: NTLM

X-Powered-By: ASP.NET

Date: Wed, 14 Nov 2007 09:11:09 GMT

4.4.3.    客戶端選擇NTLM驗證,請求質詢碼

GET /iisstart.htm HTTP/1.1

Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, application/x-silverlight, */*

Accept-Language: zh-cn

UA-CPU: x86

Accept-Encoding: gzip, deflate

User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322; InfoPath.1; .NET CLR 2.0.50727)

Host: logs:81

Connection: Keep-Alive

Authorization: Negotiate TlRMTVNTUAABAAAAB4IIogAAAAAAAAAAAAAAAAAAAAAFAs4OAAAADw==

4.4.4.    服務器返回質詢碼

HTTP/1.1 401 Unauthorized

Content-Length: 1251

Content-Type: text/html

Server: Microsoft-IIS/6.0

WWW-Authenticate: Negotiate TlRMTVNTUAACAAAACgAKADgAAAAFgomil8OZAC0QBhYAAAAAAAAAAHwAfABCAAAABQLODgAAAA9TAFoAQgBUAEkAAgAKAFMAWgBCAFQASQABAAgATABPAEcAUwAEABgAcwB6AGIAdABpAC4AZwBvAHYALgBjAG4AAwAiAGwAbwBnAHMALgBzAHoAYgB0AGkALgBnAG8AdgAuAGMAbgAFABgAcwB6AGIAdABpAC4AZwBvAHYALgBjAG4AAAAAAA==

X-Powered-By: ASP.NET

Date: Wed, 14 Nov 2007 09:11:09 GMT

4.4.5.    客戶端發送用登錄本機的帳戶加密後的質詢碼

GET /iisstart.htm HTTP/1.1

Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, application/x-silverlight, */*

Accept-Language: zh-cn

UA-CPU: x86

Accept-Encoding: gzip, deflate

User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322; InfoPath.1; .NET CLR 2.0.50727)

Host: logs:81

Connection: Keep-Alive

Authorization: Negotiate TlRMTVNTUAADAAAAGAAYAHYAAAAYABgAjgAAAAoACgBIAAAAGgAaAFIAAAAKAAoAbAAAAAAAAACmAAAABYKIogUCzg4AAAAPSgBJAE4ASgBaAEEAZABtAGkAbgBpAHMAdAByAGEAdABvAHIASgBJAE4ASgBaAMQdxp9OWMESAAAAAAAAAAAAAAAAAAAAAMEj775cWctAx2Csmbgfq2afsGcop92oMA==

4.4.6.    服務端驗證經過,返回資源

用戶端登陸的用戶名和密碼正好能匹配到服務端的一個用戶和密碼,驗證經過。

HTTP/1.1 200 OK

Content-Length: 167

Content-Type: text/html

Last-Modified: Wed, 14 Nov 2007 08:21:24 GMT

Accept-Ranges: bytes

ETag: "bf2d54589726c81:e35"

Server: Microsoft-IIS/6.0

X-Powered-By: ASP.NET

Date: Wed, 14 Nov 2007 09:11:09 GMT

 

<html>

 

<head>

<meta HTTP-EQUIV="Content-Type" Content="text/html; charset=gb2312">

 

</head>

 

<body bgcolor=white>

This is a simple page!

 

</body>

</html>

 

五、 集成驗證總結

5.1.    客戶端以ip地址訪問服務器

無論客戶端跟服務器是否在域、也無論客戶端是否以域賬號登錄,只要客戶端以ip地址訪問服務器,那麼客戶端就會選擇NTLM方式驗證,而且不會直接發送客戶端登陸用戶的用戶名和密碼給服務器,而是會彈出一個對話框要求用戶輸入用戶名和口令,而後發送到服務端驗證。

您能夠避免在使用 IP 地址或名稱中包含句點的企業內部網服務器上出現這種提示,方法是,在 Internet Explorer 的「本地 Intranet」設置中,列出包含 IP 地址的服務器,或是列出包含句點的服務器名稱。能夠經過依次單擊「工具」、「Internet 選項」、「本地 Intranet」、「站點」、「高級」來訪問「本地 Intranet」設置部分。而後在「將該網站添加到區域中」輸入 http://127.0.0.1 或其餘相關站點的 URL。

 

下面總結的都是在客戶端以機器名訪問服務器的狀況。

5.2.    服務器在域,客戶端以域賬號登錄

若是客戶端的機器在域中,同時登錄用戶又是以域用戶登陸,那麼IE選擇Kerberos驗證方式。

5.3.    其餘狀況IE都選擇採用NTLM驗證方式。

出來上述的兩種狀況,其餘狀況,客戶端都選擇NTLM驗證,並首先嚐試把登陸客戶端用戶的用戶名和密碼傳送給服務器驗證,若是驗證經過了,被直接受權訪問;若是驗證沒經過,客戶端彈出對話框要求輸入用戶名和密碼,而後再傳送到服務端驗證,直到驗證經過。

 

集成 Windows 身份驗證Kerberos的驗證方式是 Intranet 環境中最好的身份驗證方案,在這種用戶擁有 Windows 域賬戶,Kerberos驗證不在網絡上傳遞用戶密碼,只用傳送一個用戶驗證票。NTLM要傳送用戶的密碼,可是密碼通過處理後派生出一個8字節的key加密質詢碼,也是比較安全的。

 

 

4、  基自己份驗證

客戶端IE請求服務端IIS的一個頁面iisstart.htm。

IIS服務端設置:

l         不啓用匿名訪問

l         只啓用基自己份驗證

 

一、 客戶端IE申請頁面

GET /iisstart.htm HTTP/1.1

Accept: */*

Accept-Language: zh-cn

UA-CPU: x86

Accept-Encoding: gzip, deflate

User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322; InfoPath.1; .NET CLR 2.0.50727; MAXTHON 2.0)

Host: logs:81

Connection: Keep-Alive

二、 服務端返回無受權迴應,並告知客戶端要求基自己份驗證

服務端設置的基自己份驗證,因此這裏返回的無受權迴應的http頭中包含 WWW-Authenticate: Basic 頭,告訴客戶端,服務端要求的是基自己份驗證

HTTP/1.1 401 Unauthorized

Content-Length: 1327

Content-Type: text/html

Server: Microsoft-IIS/6.0

WWW-Authenticate: Basic realm="logs"

X-Powered-By: ASP.NET

Date: Mon, 19 Nov 2007 06:15:57 GMT

三、 客戶端彈出對話框要求輸入用戶名和密碼

GET /iisstart.htm HTTP/1.1

Accept: */*

Accept-Language: zh-cn

UA-CPU: x86

Accept-Encoding: gzip, deflate

User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322; InfoPath.1; .NET CLR 2.0.50727; MAXTHON 2.0)

Host: logs:81

Connection: Keep-Alive

Authorization: Basic YWRtaW5pc3RyYXRvcjpzemJ0aUAxMDA1

客戶端把用戶名和密碼轉換成base64編碼後,直接發送到服務端。

發送到服務器的「Authorization: Basic」頭裏面的「YWRtaW5pc3RyYXRvcjpzemJ0aUAxMDA1」部分就是用戶的用戶名和密碼,通過base64解碼後是這樣的:administrator:szbti@1005

四、 服務端驗證經過,返回資源

HTTP/1.1 200 OK

Content-Length: 167

Content-Type: text/html

Last-Modified: Wed, 14 Nov 2007 08:21:24 GMT

Accept-Ranges: bytes

ETag: "bf2d54589726c81:e7d"

Server: Microsoft-IIS/6.0

X-Powered-By: ASP.NET

Date: Mon, 19 Nov 2007 06:16:34 GMT

 

<html>

 

<head>

<meta HTTP-EQUIV="Content-Type" Content="text/html; charset=gb2312">

 

</head>

 

<body bgcolor=white>

This is a simple page!

 

</body>

</html>

相關文章
相關標籤/搜索