я использую LogonUser для проверки набора учетных данных пользователя домена.
LogonUser(accountName, domain, password,
LOGON32_LOGON_NETWORK, LOGON32_PROVIDER_WINNT50, ref token);
С тревожными результатами:
LogonType Current Password Old password
=========== ============================== ========================
Network Succeeds Succeeds
Batch Fails (0x00000569) Fails (invalid password)
Interactive Succeeds Fails (invalid password)
Коды ошибок:
0x00000569
:Ошибка входа в систему :пользователю не предоставлен запрошенный тип входа в систему на этом компьютере0x0000052E
:Ошибка входа в систему :Неизвестное имя пользователя или парольПодробности:
true
.(хорошо)если пользователь вводит неверные учетные данные, функция возвращает false
.(хорошо)
если пользователь меняет свой пароль и вводит новые действительные учетные данные, функция возвращает true
.( хорошо)
если пользователь вводит неверные учетные данные, функция возвращает false
.(хорошо)
если пользователь вводит свои старые учетные данные, функция возвращаетtrue
.(плохо)
Обратите внимание,:если пользователь переходит на другую машину (, на которую он никогда раньше не входил )и вводит старые учетные данные,
LogonUser
продолжается вернуть true . Это означает, что кэширование происходит не на локальной машине -, а как-то «в сети ».
true
.(хорошо)true
.(плохо)false
.(хорошо)Как при вызове LogonUser
я могу дать указание домену не использовать кэшированные учетные данные .
Примечание.:Если пользователь попытается войти в Windows со своим старым (или старым старым )паролем, он получит сообщение об ошибке неверного пароля.
Из MSDN:
LOGON32_LOGON_NETWORK
Этот тип входа предназначен для высокопроизводительных серверов для аутентификации незашифрованных паролей. Функция LogonUser не кэширует учетные данные для этого типа входа.
LOGON32_LOGON_INTERACTIVE
Этот тип входа предназначен для пользователей, которые будут использовать компьютер в интерактивном режиме, например для пользователей, которые входят в систему с помощью терминального сервера, удаленной оболочки или аналогичного процесса. Этот тип входа имеет дополнительные расходы на кэширование информации о входе в систему для отключенных операций ; поэтому он не подходит для некоторых клиент-серверных приложений , таких как почтовый сервер.
LOGON32_LOGON_BATCH
Этот тип входа предназначен для пакетных серверов, где процессы могут выполняться от имени пользователя без его прямого вмешательства.Этот тип также подходит для серверов с более высокой производительностью, которые одновременно обрабатывают множество попыток аутентификации открытым текстом, таких как почтовые или веб-серверы.
i am аутентификация простых -текстовых паролей и, таким образом, использование LOGON32_LOGON_NETWORK
. Интерактивный вход в систему кэширует учетные данные, что здесь не разрешено. Пакет хотя и не задокументирован о том, когда его следует использовать, просто терпит неудачу.
Обновление:Домен разрешает только:
Мне ясно, что это «особенность» Active Directory, которая дает 1 час льготного периода.
За исключением того, что мне не нужен льготный период, и я не хочу изменять какие-либо настройки в домене (, так как я не знаю никаких настроек в домене, которые позволили бы использовать льготный период в один час. вашего старого пароля ).