一、 IIS的身份驗證概述.... 3
1、 匿名通路... 3
2、 內建windows身份驗證... 3
2.1. NTLM驗證... 3
2.2. Kerberos驗證... 3
3、 基本身份驗證... 4
二、 匿名通路.... 4
三、 Windows內建驗證.... 5
1、 NTLM驗證過程... 5
1.1. 用戶端選擇NTLM方式... 5
1.2. 服務端傳回質詢碼... 5
1.3. 用戶端加密質詢碼再次發送請求... 5
1.4. 服務端驗證用戶端使用者和密碼... 5
2、 Kerberos驗證過程... 6
2.1. 用戶端選擇Kerberos驗證... 6
2.2. 服務端驗證身份驗證票... 6
3、 用戶端和伺服器都不在域中... 6
3.1. 用戶端用ip位址通路服務... 6
3.1.1. 用戶端IE申請頁面... 6
3.1.2. 服務端傳回無授權回應... 6
3.1.3. 用戶端選擇NTLM驗證,要求輸入使用者名密碼,請求質詢碼... 7
3.1.4. 伺服器傳回質詢碼... 7
3.1.5. 用戶端發送使用前面輸入賬戶的密碼加密後的質詢碼... 7
3.1.6. 服務端驗證通過,傳回資源... 8
3.2. 用戶端用機器名通路伺服器,登入使用者名/密碼跟伺服器不比對... 9
3.2.1. 用戶端IE申請頁面... 9
3.2.2. 服務端傳回無授權回應... 9
3.2.3. 用戶端選擇NTLM驗證,請求質詢碼... 9
3.2.4. 伺服器傳回質詢碼... 9
3.2.5. 用戶端發送用登陸本機的賬戶加密後的質詢碼... 10
3.2.6. 服務端傳回無授權回應... 10
3.2.7. 用戶端及選選擇NTLM驗證,要求輸入使用者名和密碼,再次請求質詢碼... 10
3.2.8. 服務端傳回質詢碼... 11
3.2.9. 用戶端發送使用前面輸入賬戶的密碼加密後的質詢碼... 11
3.2.10. 服務端驗證通過,傳回資源... 11
3.3. 用戶端用機器名通路伺服器,登入使用者名/密碼跟伺服器比對... 12
3.3.1. 用戶端IE申請頁面... 12
3.3.2. 服務端傳回無授權回應... 12
3.3.3. 用戶端選擇NTLM驗證,請求質詢碼... 12
3.3.4. 伺服器傳回質詢碼... 13
3.3.5. 用戶端發送用登陸本機的賬戶加密後的質詢碼... 13
3.3.6. 服務端驗證通過,傳回資源... 13
4、 用戶端和伺服器都在同一域中... 14
4.1. 用戶端用機ip通路伺服器... 14
4.1.1. 用戶端IE申請頁面... 14
4.1.2. 服務端傳回無授權回應... 14
4.1.3. 用戶端選擇NTLM驗證,要求輸入使用者名密碼,請求質詢碼... 15
4.1.4. 伺服器傳回質詢碼... 15
4.1.5. 用戶端發送使用前面輸入賬戶的密碼加密後的質詢碼... 15
4.1.6. 服務端驗證通過,傳回資源... 16
4.2. 用戶端用機器名通路伺服器,用戶端使用者以域賬戶登入... 16
4.2.1. 用戶端IE申請頁面... 16
4.2.2. 服務端傳回無授權回應... 16
4.2.3. 用戶端選擇Kerberos驗證,發送驗證票到服務端... 17
4.2.4. 服務端驗證通過,傳回資源... 17
4.3. 用戶端用機器名通路伺服器,用戶端使用者以用戶端本地使用者登入,使用者名/密碼跟伺服器賬戶不比對 18
4.3.1. 用戶端IE申請頁面... 18
4.3.2. 服務端傳回無授權回應... 18
4.3.3. 用戶端選擇NTLM驗證,請求質詢碼... 19
4.3.4. 伺服器傳回質詢碼... 19
4.3.5. 用戶端發送用登陸本機的賬戶加密後的質詢碼... 19
4.3.6. 服務端傳回無授權回應... 20
4.3.7. 用戶端及選選擇NTLM驗證,要求輸入使用者名和密碼,再次請求質詢碼... 20
4.3.8. 服務端傳回質詢碼... 20
4.3.9. 用戶端發送使用前面輸入賬戶的密碼加密後的質詢碼... 20
4.3.10. 服務端驗證通過,傳回資源... 21
4.4. 用戶端用機器名通路伺服器,用戶端使用者以用戶端本地使用者登入,使用者名/密碼跟伺服器賬戶比對 21
4.4.1. 用戶端IE申請頁面... 21
4.4.2. 服務端傳回無授權回應... 22
4.4.3. 用戶端選擇NTLM驗證,請求質詢碼... 22
4.4.4. 伺服器傳回質詢碼... 22
4.4.5. 用戶端發送用登陸本機的賬戶加密後的質詢碼... 22
4.4.6. 服務端驗證通過,傳回資源... 23
5、 內建驗證總結... 23
5.1. 用戶端以ip位址通路伺服器... 23
5.2. 伺服器在域,用戶端以域帳号登陸... 24
5.3. 其他情況IE都選擇采用NTLM驗證方式。... 24
四、 基本身份驗證.... 24
1、 用戶端IE申請頁面... 24
2、 服務端傳回無授權回應,并告知用戶端要求基本身份驗證... 24
3、 用戶端彈出對話框要求輸入使用者名和密碼... 25
4、 服務端驗證通過,傳回資源... 25
一、 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
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 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
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 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
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 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
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: 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)
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 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 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
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; 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:[email protected]
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>
<script type="text/javascript"></script>