2009-06-29 34 views
2

更新IIS /的DirectoryEntry/ASP.NET - 登錄失敗

頂部把這個,因爲它是瘋狂的:)

因此一些用戶就可以工作,有些則沒有。當我通過IE7使用自己的帳戶時,它不起作用(我的代碼捕獲異常並退回到僅使用身份名稱而不是AD全名)。當我通過Chrome嘗試時,它會提示我輸入用戶名和密碼,並顯示完整名稱。因此,用戶帳戶,服務器代碼和設置是相同的,但使用不同的瀏覽器發送認證正在使其工作。

我也清除了IE7中的所有cookies,重新啓動,並且IE的行爲沒有變化。大量的IE7用戶都能正常工作。

更新#2

遠程登錄到不同的機器,去了網頁在IE7,它顯示我的全名。沒有線索。我想可能會議正在緩存某些內容,但我已重新發布應用程序,並且應該清除會話。我在想也許一個cookie有一個老的/壞的標記,但我已經清除了這些並再次嘗試。某處必須獲得長期緩存。希望它能夠解決問題。

結束更新

你好,

我從我們在IIS 6.0上運行的ASP.NET(MVC)應用AD檢索用戶的全名。

string domainUser = filterContext.HttpContext.User.Identity.Name; 

WindowsIdentity windowsIdentity = filterContext.HttpContext.User.Identity as WindowsIdentity; 

WindowsImpersonationContext impersonationContext = windowsIdentity.Impersonate(); 

DirectoryEntry userEntry = new DirectoryEntry("WinNT://" + domainUser.Replace('\\', '/') + ",User"); 
filterContext.Controller.ViewData["User"] = (string)userEntry.Properties["fullname"].Value; 

最後一行引發異常:「登錄失敗:未知用戶名或密碼錯誤。」

如果我看一下HttpContext.User.Identity,它是一個有效的域用戶,並且WindowsIdentity.GetCurrent正在被正確模擬。

這個異常似乎還沒有被100%的時間拋出,如果從IIS服務器瀏覽它不會被拋出。

我的web.config看起來像:

<authentication mode="Windows"/> 
<authorization> 
    <deny users="?"/> 
</authorization> 
<identity impersonate="false"/> 

什麼是竊聽我的是,如果我刪除了模擬線:

WindowsImpersonationContext impersonationContext = windowsIdentity.Impersonate(); 

它的工作原理。 WindowsIdentity.GetCurrent是NT AUTHORITY \ NETWORK SERVICE,它不是域用戶,但不會引發異常,並且從AD中檢索完整名稱。

最後一點是,這似乎只是開始發生應用程序的新部署(從測試到現場)。我不知道我是否缺少IIS設置或什麼,但代碼沒有改變。

我知道我以前需要模仿以使其工作,並且好像我需要模仿,所以我很猶豫是否在不完全知道發生了什麼以及爲何發生此錯誤的情況下刪除模擬呼叫正在發生。

謝謝。

回答

1

我懷疑問題是託管ASP.NET應用程序的服務器不受信任委派。谷歌對於「值得信賴的代表團」獲取更多信息,或者this MSDN article是一個很好的起點。

+0

經過多次測試後,雖然我不確定問題出在哪裏,但我不認爲它可以100%作爲服務器。我添加了更新,但基本上它適用於相同的帳戶,相同的服務器,相同的客戶機,不同的瀏覽器(一個瀏覽器失敗,一個正常)。我很難過。我確實嘗試了這個建議,並將服務器設置爲可信任的委派,但事情似乎沒有解決(即傳播時間可能比我等待的時間更長)。 – anonymous 2009-06-29 18:06:17