Вызов ChangePassword с объектом DirectoryEntry - PullRequest
5 голосов
/ 02 февраля 2011

Независимо от того, что я пытаюсь бросить, этот метод всегда приводит к следующему исключению:

         var retVal = this.DirectoryEntry.Invoke("ChangePassword", new object[] { oldPassword, newPassword }) == null;

InnerException = {"Пароль не соответствует требованиям политики паролей. Проверьте минимальную длину пароля, сложность пароля и требования к истории паролей. (Исключение из HRESULT: 0x800708C5)"}

Я, естественно, проверил политику домена по умолчанию (ни один не найден в моем тестовом домене), групповую политику OU (ни один не существует) и не могу найти ничего, что могло бы управлять политикой паролей, но независимо от того, какой длинный или сложный пароль я предоставляю в Функция, это приводит к тому же исключению. Теперь самая интересная часть Когда я делаю то же самое (для того же объекта DirectoryEntity и того же пароля), вызывая это:

 var retVal = this.DirectoryEntry.Invoke("SetPassword", new object[] { newPassword }) == null;

Последний вызов завершается успешно без каких-либо проблем.

Ответы [ 2 ]

7 голосов
/ 02 февраля 2011

Существует ряд групповых политик, которые могут повлиять на сложность пароля. Большинство из них включены по умолчанию после установки Active Directory. Если вы никогда не касались их после настройки тестового домена, скорее всего, эти политики паролей все еще действуют.

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

Default Domain Security Settings

Подробные описания можно найти в каждой из политик MSDN. Я просто включу резюме и ссылку здесь.

Все вышеперечисленные настройки могут быть причиной ошибки 0x800708C5. В частности, я предполагаю, что это политика паролей «минимальный срок действия пароля», вызывающая у вас проблемы. По умолчанию установлено 1 день. Если ваша тестовая учетная запись является новой учетной записью, созданной только сейчас, вы не можете изменить свой пароль в тот же день.

Так что теперь вы можете подумать, что в вашей тестовой среде вам следует отключить все эти политики паролей для целей разработки. Я не буду рекомендовать просто сделать все политики неопределенными, сняв флажок на страницах свойств. Я бы порекомендовал следующие варианты.

Последний шаг, который вам нужно сделать, - снова заполнить групповую политику на вашем компьютере. Помните, что групповая политика - это настройки, хранящиеся в Active Directory. Групповые политики компьютеров применяются во время загрузки компьютера, в то время как групповые политики пользователей применяются во время входа в систему. Политики паролей являются одной из тех политик компьютера. Таким образом, вы можете либо перезагрузить компьютер сейчас, либо перейти в командную строку и запустить gpupdate.

Надеюсь, я не пропустил ни одной важной информации. Дайте мне знать, если это все еще не работает:)

1 голос
/ 02 февраля 2011

У меня нет прямого ответа, но здесь есть еще один похожий вопрос: https://stackoverflow.com/questions/2517262

Будьте осторожны с SetPassword, так как он уничтожит приватные пользовательские крипто ключи: http://msmvps.com/blogs/alunj/archive/2006/11/07/ChangePassword-versus-SetPassword.aspx

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