本文轉自:http://www.cnblogs.com/chnking/archive/2007/11/20/965553.html#_Toc183326163
一、 IIS的身份驗證概述
1、 匿名訪問
2、 集成windows身份驗證
2.1. NTLM驗證
2.2. Kerberos驗證
3、 基本身份驗證
二、 匿名訪問
三、 Windows集成驗證
1、 NTLM驗證過程
1.1. 客戶端選擇NTLM方式
1.2. 服務端返回質詢碼
1.3. 客戶端加密質詢碼再次發送請求
1.4. 服務端驗證客戶端用戶和密碼
2、 Kerberos驗證過程
2.1. 客戶端選擇Kerberos驗證
2.2. 服務端驗證身份驗證票
3、 客戶端和服務器都不在域中
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、 客戶端和服務器都在同一域中
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、 集成驗證總結
5.1. 客戶端以ip地址訪問服務器
5.2. 服務器在域,客戶端以域帳號登陸
5.3. 其他情況IE都選擇采用NTLM驗證方式。
四、 基本身份驗證
1、 客戶端IE申請頁面
2、 服務端返回無授權回應,並告知客戶端要求基本身份驗證
3、 客戶端彈出對話框要求輸入用戶名和密碼
4、 服務端驗證通過,返回資源
一、 IIS的身份驗證概述
IIS具有身份驗證功能,可以有以下幾種驗證方式:
1、 匿名訪問
這種方式不驗證訪問用戶的身份,客戶端不需要提供任何身份驗證的憑據,服務端把這樣的訪問作為匿名的訪問,並把這樣的訪問用戶都映射到一個服務端的賬戶,一般為IUSER_MACHINE這個用戶,可以修改映射到的用戶:
2、 集成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驗證票,如果解密成功,說明此驗證票真實有效,然后查看此驗證票是否在有效期內,在有效期內,用驗證票中帶的會話口令去解密驗證器,獲得其中的用戶名和工作站地址,如果跟驗證票中的用戶名和地址相符則說明發送此驗證票的用戶就是驗證票的所有者,從而驗證本次請求有效。
3、 基本身份驗證
這種驗證方式完全是把用戶名和明文用明文(經過base64編碼,但是base64編碼不是加密的,經過轉換就能轉換成原始的明文)傳送到服務端驗證。服務器直接驗證服務器本地是否用用戶跟客戶端提供的用戶名和密碼相匹配的,如果有則通過驗證。
二、 匿名訪問
服務端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
三、 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兩種驗證的情況。
1、 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回應;如果相同,就表示客戶端輸入這個用戶的密碼正確,驗證通過,返回客戶端請求的資源。
2、 Kerberos驗證過程
2.1. 客戶端選擇Kerberos驗證
如果客戶端選擇了Kerberos驗證,客戶端直接在請求頭中加入Authorization: Negotiate頭,內容為:
Authorization: Negotiate XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
其中“XXXXXXXXXX”包含了客戶端登錄用戶的身份驗證票(登錄時域中的票據服務器發放的標識此登錄用戶身份的票據,其中不包含用戶的密碼)。
2.2. 服務端驗證身份驗證票
服務器驗證用戶驗證票,如果有效的票據,服務端能據此獲得用戶的用戶名,並驗證用戶的有效性。驗證通過后,服務端返回客戶端請求的資源。
但是客戶端IE何時選擇NTLM 、合適選擇Kerberos呢?下面通過一系列的測試來找出答案。
分服務器和客戶端在域不在域兩種情況測試。
3、 客戶端和服務器都不在域中
測試環境為服務器和客戶端機器在同一個局域網中,但是都不在域中。客戶端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>
4、 客戶端和服務器都在同一域中
服務器和客戶端機器在同一個局域網中,並同在一個域中。客戶端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、 集成驗證總結
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加密質詢碼,也是比較安全的。
四、 基本身份驗證
客戶端IE請求服務端IIS的一個頁面iisstart.htm。
IIS服務端設置:
l 不啟用匿名訪問
l 只啟用基本身份驗證
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
2、 服務端返回無授權回應,並告知客戶端要求基本身份驗證
服務端設置的基本身份驗證,所以這里返回的無授權回應的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
3、 客戶端彈出對話框要求輸入用戶名和密碼
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
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: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>