использовать кешированные учетные данные?

я использую 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. Интерактивный вход в систему кэширует учетные данные, что здесь не разрешено. Пакет хотя и не задокументирован о том, когда его следует использовать, просто терпит неудачу.


Обновление:Домен разрешает только:

  • предыдущий пароль (не более назад)
  • только на 60 минут

Мне ясно, что это «особенность» Active Directory, которая дает 1 час льготного периода.

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

10
задан Ian Boyd 30 April 2012 в 20:34
поделиться