簡體   English   中英

IIS / DirectoryEntry / ASP.NET-登錄失敗

[英]IIS / DirectoryEntry / ASP.NET - Logon Failure

更新

把它放在頂部,因為它很瘋狂:)

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

我還從IE7中清除了所有cookie,然后重新啟動,並且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設置或其他設置,但是代碼沒有更改。

我知道我需要預先模擬才能使其正常工作,而且看來我應該模擬,所以我很猶豫在不完全了解正在發生的情況以及為什么現在會發生此錯誤的情況下刪除模擬調用。

謝謝。

我懷疑問題在於托管ASP.NET應用程序的服務器不受信任。 Google提供“受信任的授權”以獲取更多信息,或者這篇MSDN文章是一個很好的起點。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM