Я использую обсуждаемое решение здесь для аутентификации пользователей по активному каталогу в моем веб-приложении ASP.NET. Я написал простой класс 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 , в конструктор PrincipalContext, но эти параметры, похоже, никак не влияют .
using (var context = new PrincipalContext(ContextType.Domain, "MyDomain", "OU=MyCompany,DC=some,DC=stuff")) {
return context.ValidateCredentials(username, password);
}
У нас одна и та же проблема как минимум на двух разных серверах в нашей сети. Серверы подключены к AD и работают под управлением ОС Windows Server 2003 SP2 (IIS6)
Одна из идей, которые у меня возникли, заключалась в том, что проблема может быть связана с тем фактом, что наш домен имеет некоторые доверительные отношения с другими доменами и что они каким-то образом участвуют при проверке пользователя. Однако пользователи, которых мы пытаемся проверить, существуют исключительно в «нашей» AD.