2013-04-30 2 views
0

Я работаю в сценарии, когда пароль пользователя уже истек в Active Directory. Я пытаюсь проверить, введен ли пользователь действительное имя пользователя и соответствующий действительный, но истекший пароль или нет. Если пользователь вводит правильное имя пользователя и исправляет истекший пароль, я перенаправляю их на страницу, где они могут сбросить пароль. Однако, если пользователь вводит неверный пароль с истекшим сроком действия, пользователь должен получать уведомление со стандартным сообщением UserName and or password is not correct. Я проверил онлайн, и они говорят об использовании метода validatecredentials после установки pwdLastSet в -1 для отключения user must change password at next logon.Проверка правильности пароля пользователя при истечении срока действия пароля в Active direcory

How to check AD user credentials when the user password is expired or "user must change password at next logon"

Будет ли этот подход позволяет мне проверить правильность истечения срока действия пароля? Я пробовал этот подход, и, похоже, он не работает для меня.

+0

Связано это с ADFS? В противном случае удалите тег. – nzpcmad

ответ

1

Yup - API ValidateCredentials дает слишком много ложных срабатываний.

Это что-то черное, но вы можете проверить User-Account-Control attribute и ms-DS-User-Account-Control-Computed attribute, у обоих из которых есть бит «Истек срок действия пароля».

Обычно я использую вышеуказанное, но некоторые люди предлагают использовать Windows API напрямую - см. Active Directory (LDAP) - Check account locked out/Password expired.

+0

Привет, nzpcmad, я пытался использовать , если (!) LogonUser (пользователь, домен, пропуск, LogonTypes.Network, LogonProviders.Default, out token)) { errorCode = Marshal.GetLastWin32Error(); success = false; } внутри блока catch try. Я получил код ошибки, как указано в приведенной ссылке (LDAP-Check account ..). Однако, когда я отключил пользователя и попытался войти в систему, с учетом правильного или неправильного пароля, я получаю тот же код ошибки, то есть 1331. Я ожидал 1326, когда был указан неправильный пароль. Я что-то пропустил? – user1072578

+0

Звучит правильно - 1331 - ERROR_ACCOUNT_DISABLED. Я уверен, что проверка пароля находится в конце цепочки, то есть код проверяет на наличие блокировки, блокировку и т. Д., Прежде чем проверять правильность пароля. – nzpcmad

+0

Но документация для кода ошибки сообщает, http://www-01.ibm.com/support/docview.wss?uid=swg21290631, Возвращает 1331 только при наличии действительного имени пользователя и пароля/учетных данных. В моем случае, я получаю 1331, даже когда пароль неправильный. Я ожидаю, что код ошибки 1326, когда я использую правильное имя пользователя и неправильный пароль. По крайней мере, я получаю 1326 на одном из старых серверов, где реализована аналогичная функциональность. – user1072578

Смежные вопросы