2010-12-17 60 views
4

我正在使用討論的解決方案here來對我的ASP.NET Web應用程序中的活動目錄進行身份驗證。我寫了一個簡單的ADMembershipProvider類,它與FormsAuthentication一起使用。在本地運行項目時工作正常,但在部署到網絡中的服務器時,ValidateUser調用需要很長時間(大約20秒)。使用PrincipalContext.ValidateUser時的性能問題

//Assumes using System.DirectoryServices.AccountManagement 
public override bool ValidateUser(string username, string password) { 
    using (var context = new PrincipalContext(ContextType.Domain)) { 
     return context.ValidateCredentials(username, password); 
    } 
} 

我嘗試添加容器參數上msdn到PrincipalContext構造函數的記載,但這些參數似乎沒有產生任何影響任何責任。

using (var context = new PrincipalContext(ContextType.Domain, "MyDomain", "OU=MyCompany,DC=some,DC=stuff")) { 
    return context.ValidateCredentials(username, password); 
} 

我們的網絡中至少有兩臺不同的服務器存在同樣的問題。服務器連接到AD並運行操作系統Windows服務器2003 SP2(IIS6)

我的一個想法是,該問題可能與我們的域對其他域具有某些信任並且它們以某種方式在驗證用戶時涉及。但是,我們試圖驗證的用戶僅在「我們的」AD中存在。

+0

你是在IISUser或網絡服務下運行的站點/ apppool嗎? 後者可能會更快,但建議不要在該帳戶下運行網站。 – MarcelDevG 2010-12-17 12:34:13

+0

好的,謝謝,該網站已經作爲網絡服務運行,雖然 – 2010-12-17 14:36:29

+1

我想這是因爲你傳遞NetBIOS名稱到你的PrincipalContext()。嘗試傳入DNS域名。 – 2010-12-24 07:36:23

回答

4

遇到此問題,必須使用ValidateCredentials(string, string, ContextOptions)方法來傳遞適當的枚舉組合以訪問我們的環境中的ActiveDirectory連接。