2012-03-27 101 views
1

我有以下配置:的ASPX頁面請求雙,NTLM身份驗證請求失敗

  • IIS 7.5
  • 網站 - 身份驗證:所有選項禁用,啓用僅適用於Windows 認證。
  • 應用程序B(作爲A的子Web應用程序):身份驗證:啓用了匿名,啓用了基本功能,禁用了Windows身份驗證。

這兩個應用程序運行ASP.NET 4,單獨的應用程序池,經典模式。

現在,應用程序B有這種奇怪的行爲,我注意到在提琴手。 對於一個aspx頁面的每個請求,它顯示了兩個條目: 第一個請求:

GET https://example.com/page.aspx HTTP/1.1 
Accept: image/jpeg, application/x-ms-application, image/gif, application/xaml+xml, image/pjpeg, application/x-ms-xbap, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */* 
Referer: https://example.com/ 
Accept-Language: en-GB 
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C; .NET4.0E; Zune 4.7) 
Cookie: ASP.NET_SessionId=123456789 
Accept-Encoding: gzip, deflate 
Host: example.com 
Authorization: NTLM DFGHJKLDRFGHNXAAAAA== 
Connection: Keep-Alive 
Cache-Control: no-cache 
Content-Length: 0 

作爲迴應,我得到一個401之後,第二個請求是針對同一個資源:

GET https://example.com/page.aspx HTTP/1.1 
Accept: image/jpeg, application/x-ms-application, image/gif, application/xaml+xml, image/pjpeg, application/x-ms-xbap, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */* 
Referer: https://example.com/ 
Accept-Language: en-GB 
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C; .NET4.0E; Zune 4.7) 
Authorization: Basic ZXVyasdasdasdasdasdasd= 
Accept-Encoding: gzip, deflate 
Host: example.com 
Connection: Keep-Alive 
Cache-Control: no-cache 
Content-Length: 0 
Cookie: ASP.NET_SessionId=lasdasdasdasdasdasdasd 

第二個是狀態200可以。

區別在於「授權」行中,第一個顯示NTLM(給401訪問被拒絕)有時會導致JavaScript的意外行爲,例如,與更新面板(Sys.WebForms.PageRequestManagerParserErrorException)。

我錯過了什麼?如何設置IIS(或webapp)不使這第一個「NTLM」請求? 謝謝你的幫助。

編輯:另一個有趣的問題,我注意到:在同一個環境中,我有第二套這些應用程序(只綁定到另一個數據庫)。在此集中,應用程序A啓用了匿名身份驗證,啓用了窗體並禁用了窗口。應用B具有與第一組相同的設置。在這種情況下,沒有失敗的請求(401)。一切順利。

+0

您聲明應用程序B是應用程序A的「子應用程序」 - 應用程序B實際上是應用程序A的子目錄嗎? – kpcrash 2012-03-27 15:47:08

+0

@kpcrash它是IIS(虛擬目錄)中的一個子應用程序,在文件系統上有單獨的目錄。 – lukasz 2012-03-27 17:05:40

+0

有人問,因爲除非有什麼變化,否則該子目錄會從安全性方面繼承父項。所以首先嚐試父母的安全方法,然後實現子應用程序設置並嘗試 - 將子應用程序移動到其自己的應用程序文件夾的想法? – kpcrash 2012-03-27 17:17:45

回答

1

看起來問題已解決。由於該站點在IE中作爲Intranet站點添加,並且自動登錄的Intranet區域已打開,所以公司域計算機首先嚐試了NTLM身份驗證。這是NTLM請求的來源 - 而且由於IIS中禁用了Windows身份驗證,因此它提供了錯誤的響應。