PrincipalContext.ValidateCredentials завершается с ошибкой "Сервер не может обрабатывать запросы каталогов".
У меня есть приложение, в котором пользователь проходит аутентификацию в нашей 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(String userName, String password)
в DPI.FormLogin.Authenticate() в c:\Developing\Source\DPI\Client\DPI\FormLogin.cs: строка 280
Ошибка появляется только для некоторых пользователей, а не постоянно. Возможно, это связано с настройками безопасности, которые теперь стали более строгими на Win 10, чем на Win 7 раньше.
Есть идеи как это решить? Как я могу опросить подключенный в данный момент сервер LDAP? Возможно, наши серверы настроены немного иначе, и проблема ограничена только одним сервером, который может быть неправильно настроен.
1 ответ
Да добавление 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);
}
}