Проблемы с производительностью при использовании PrincipalContext.ValidateUser - PullRequest
4 голосов
/ 17 декабря 2010

Я использую обсуждаемое решение здесь для аутентификации пользователей по активному каталогу в моем веб-приложении 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.

1 Ответ

4 голосов
/ 02 сентября 2011

Исправьте эту проблему и пришлось использовать метод ValidateCredentials(string, string, ContextOptions) для передачи правильной комбинации перечислений для доступа к нашему соединению ActiveDirectory в нашей среде.

...