【发布时间】:2011-05-27 01:39:22
【问题描述】:
我正在使用here 讨论的解决方案针对我的 ASP.NET Web 应用程序中的活动目录对用户进行身份验证。我编写了一个简单的 ADMembershipProvider 类,它与 FormsAuthentication 一起使用。在本地运行项目时工作正常,但当部署到网络中的服务器时,ValidateUser 调用需要很长时间(大约 20 秒)。
//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 中记录的 name 和 container 参数添加到 PrincipalContext 构造函数,但这些参数似乎没有任何效果。
using (var context = new PrincipalContext(ContextType.Domain, "MyDomain", "OU=MyCompany,DC=some,DC=stuff")) {
return context.ValidateCredentials(username, password);
}
我们网络中至少有两台不同的服务器存在同样的问题。服务器连接到 AD 并运行 OS Windows server 2003 SP2 (IIS6)
我的一个想法是,问题可能与我们的域对其他域有一些信任这一事实有关,并且在验证用户时它们以某种方式参与。但是,我们尝试验证的用户仅存在于“我们的”广告中。
【问题讨论】:
-
您是在 IISUser 或网络服务下运行的站点/应用程序池吗?后者可能更快,但不建议在该帐户下运行网站。
-
好的,谢谢,该站点已经作为网络服务运行了
-
我猜这是因为您将 NetBIOS 名称传递给您的 PrincipalContext()。尝试传入 DNS 域名。
标签: c# active-directory asp.net-membership