PrincipalContext.ValidateCredentials не работает для некоторых пользователей? - PullRequest
0 голосов
/ 16 мая 2019

У меня есть следующий код:

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, которая должна иметь доступ.

Почему некоторые пользователи получают это исключение?

1 Ответ

0 голосов
/ 17 мая 2019

Изменение ValidateCredentials на это решает проблему:

context.ValidateCredentials(account, password, ContextOptions.Negotiate | ContextOptions.Signing | ContextOptions.Sealing)

Однако, вероятно, это все еще вопрос безопасности учетной записи Active Directory.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...