Тестирование "PrincipalContext` с использованием` ValidateCredentials (null, null) `ведет себя неожиданно - PullRequest
0 голосов
/ 27 апреля 2018

Мне нужно проверить учетные данные, которые используются для подключения к серверу 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
}

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

1 Ответ

0 голосов
/ 27 апреля 2018

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

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

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

...