PrincipalContext.ValidateCredentials завершается с ошибкой «Сервер не может обрабатывать запросы каталога». - PullRequest
0 голосов
/ 12 января 2019

У меня есть приложение, в котором пользователь проходит аутентификацию в нашей Active Directory:

private bool Authenticate()
{
     using (var context = new PrincipalContext(ContextType.Domain, Environment.UserDomainName)) 
     {
         return context.ValidateCredentials(this.Username.Text.Trim(), this.Password.Text.Trim());
     }
}

Он работал нормально в течение нескольких лет. Теперь наши машины с Windows 7 заменяются на Windows 10, и некоторые пользователи получают эту ошибку:

Сервер не может обрабатывать запросы каталогов.

в System.DirectoryServices.Protocols.ErrorChecking.CheckAndSetLdapError (ошибка Int32)
в System.DirectoryServices.Protocols.LdapSessionOptions.FastConcurrentBind ()
в System.DirectoryServices.AccountManagement.CredentialValidator.BindLdap (NetworkCredential creds, ContextOptions contextOptions)
в System.DirectoryServices.AccountManagement.CredentialValidator.Validate (String userName, String password)
в System.DirectoryServices.AccountManagement.PrincipalContext.ValidateCredentials (строковое имя пользователя, строковый пароль)
в DPI.FormLogin.Authenticate () в c: \ Developing \ Source \ DPI \ Client \ DPI \ FormLogin.cs: строка 280

Ошибка появляется только для некоторых пользователей, а не постоянно. Возможно, это связано с настройками безопасности, которые теперь стали намного строже в Win 10, чем в Win 7. Раньше.

Есть идеи, как это решить? Как я могу опросить подключенный в данный момент сервер LDAP? Возможно, наши серверы настроены немного иначе, и проблема ограничена только одним сервером, который может быть неправильно настроен.

1 Ответ

0 голосов
/ 17 января 2019

Да, добавление ContextOptions.Negotiate решило проблему:

private bool Authenticate()
{
     using (var context = new PrincipalContext(ContextType.Domain, Environment.UserDomainName)) 
     {
         return context.ValidateCredentials(this.Username.Text, this.Password.Text, ContextOptions.Negotiate);
     }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...