У меня есть следующий код:
public void AuthenticateActiveDirectoryAccount(string username, string password)
{
PrincipalContext context;
var envSettings = _settingsService.GetGlobalSetting<EnvironmentSettings>().Props;
string ADServer = envSettings.ActiveDirectory.ServerURI;
string ADUserName = envSettings.ActiveDirectory.Username;
string ADUserPassword = envSettings.ActiveDirectory.Password;
string account = null;
account = username.ToLower();
if (ADUserName.Length > 0)
context = new PrincipalContext(ContextType.Domain, ADServer, ADUserName, ADUserPassword);
else
context = new PrincipalContext(ContextType.Domain, ADServer);
using (context)
{
if (!context.ValidateCredentials(account, password))
{
throw new Exception();
}
}
}
Это прекрасно работает для большинства пользователей, но некоторые получают следующее исключение:
Сервер не обрабатывает запросы каталогов: System.DirectoryServices.Protocols.ErrorChecking.CheckAndSetLdapError (ошибка Int32) \ r \ n vid System.DirectoryServices.Protocols.LdapSessionOptions.FastConcurrentBind () \ r \ n vid System.DirectoryServices.\ n vid System.DirectoryServices.AccountManagement.CredentialValidator.Validate (Строковое имя пользователя, строковый пароль) \ r \ n vid System.DirectoryServices.AccountManagement.PrincipalContext.ValidateCredentials (строковое имя пользователя, строковый пароль)
1008 *1009*Я подумал, что пользователи-неудачники не имеют разрешения на вызов AD, но я уверен, что AdServer, AdUserName и AdUserPassword установлены с глобальной учетной записью AD, которая должна иметь доступ.
Почему некоторые пользователи получают это исключение?