Тестирование «PrincipalContext» с использованием «ValidateCredentials (null, null)» ведет себя неожиданно

Мне нужно проверить учетные данные, которые используются для подключения к серверу AD. Если передать неверные учетные данные PrincipalContext(ContextType, String, String, String), PrincipalContext.ConnectedServer выдает ошибку System.DirectoryServices.DirectoryServicesCOMException, которая обнаруживается при первом использовании PrincipalContext.

Я пытаюсь проверить учетные данные с помощью PrincipalContext.ValidateCredentials(null, null), но у меня возникают проблемы. Согласно . Документация по NET Core 2.0

Метод ValidateCredentials привязывается к серверу, указанному в конструкторе. Если параметры имени пользователя и пароля равны нулю, учетные данные, указанные в конструкторе, проверяются.

Я создаю соединение с сервером.

string username = "username"
string password = "password"

PrincipalContext ctx = new PrincipalContext(ContextType.Domain, "my_domain.local", username, password);

И затем, чтобы проверить соединение, я пытаюсь:

if (ctx.ValidateCredentials(null, null))
{
    // This block does not get hit!
    // This is surprising because the credentials are valid
}

Который отличается от:

if (ctx.ValidateCredentials(username, password))
{
    // Credentials are valid, this block gets hit
}

Документы заставляют меня поверить, что эти вызовы должны вести себя одинаково, но я получаю разные результаты. Почему это так и как правильно проверить соединение?


person Wes Toleman    schedule 27.04.2018    source источник


Ответы (1)


Я смог воспроизвести это, запустив ваш код под локальной учетной записью на моем компьютере и передав действительные учетные данные домена в конструкторе. ValidateCredentials(null, null) действительно терпит неудачу.

Это похоже на ошибку либо в коде, либо в документации, поэтому я отправил сообщение об ошибке на GitHub: https://github.com/dotnet/corefx/issues/29369

Редактировать: похоже, они решили оставить реализацию как есть и исправить документацию.

person Gabriel Luci    schedule 27.04.2018
comment
Спасибо за ответ, Габриэль. Знаете ли вы, как правильно проверить соединение, или мне следует написать дополнительный вопрос? - person Wes Toleman; 28.04.2018
comment
Чтение исходный код, похоже, что простое создание нового объекта PrincipalContext проверяет соединение. - person Gabriel Luci; 29.04.2018
comment
Детали слишком велики для комментария, поэтому я разместил дополнительный вопрос. Это был не совсем тот ответ, который я хотел, но он помог мне принять его. - person Wes Toleman; 30.04.2018