Остановить автоматический вход в систему после сбоя - пользовательский поставщик учетных данных Windows

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

CustomCredential::SetSelected (__out BOOL* pbAutoLogon) {
    *pbAutoLogon = TRUE; // FALSE;
     return S_OK;
}

Теперь при выборе плитки автоматический вход происходит без проблем.

В качестве тестового примера я изменил пароль, и, как и ожидалось, не удалось войти в систему. После сбоя появляется сообщение об ошибке, и когда я нажимаю ОК (это единственный вариант), учетные данные повторно отправляются для повторной попытки. Как мы можем остановить такое поведение? Какой метод вызывается после сбоя аутентификации?

Я работал с ReportResult(), но это не помогло.

Заранее благодарим.  Сообщение об ошибке (не о чем беспокоиться), но после нажатия на кнопку

Сообщение об ошибке (не о чем беспокоиться), но после того, как вы нажмете кнопку


person Vulcan    schedule 22.09.2017    source источник


Ответы (1)


Прошло некоторое время, но я считаю, что GetSerialization () вызывается для возврата сериализованных учетных данных в LogonUI. Вам также необходимо реализовать это. Я думаю, что в образцах поставщиков учетных данных есть рабочий код для KERB_INTERACTIVE_UNLOCK_LOGON.

Вы также можете условно изменить * pbAutoLogon в SetSelected () - я делаю это в моем провайдере учетных данных в зависимости от определенных результатов.

ReportResult () будет вызываться после того, как GetSerialization вернет свой результат в LogonUI. Внутри ReportResult () вы можете сделать такие вещи, как очистить поле пароля (что и сделано в примере кода).

Если вы не возвращаете сериализованные учетные данные в GetSerialization, я думаю, вы можете получить ошибку, указанную в исходном сообщении. В образцах учетных данных KerbInteractiveUnlockLogonPack () вызывается в GetSerialization (), и это то, что эффективно «регистрирует» пользователя.

Ошибка кажется конкретной - «пользователю не был предоставлен запрошенный тип входа в систему», так что, возможно, это как-то связано с правами пользователя, с которым вы тестируете.

Если вы используете удаленный рабочий стол, убедитесь, что ваши пользователи входят в нужные группы, чтобы иметь возможность войти в систему (https://support.jumpdesktop.com/hc/en-us/articles/216424183-General-RDP-You-must-be-grant-the-Allow-log-on-through-the-Terminal-or-Remote-Desktop-Services-Right-) или, если это обычный пользователь, ему разрешен интерактивный вход.

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

person Jonathan Galentine    schedule 24.09.2017
comment
Спасибо за помощь @jonathan. Что я пытаюсь найти, если предоставленные учетные данные неверны или не позволяют войти в систему, где мы это поймем? Условная обработка * pbAutoLogon - это путь вперед, но как мы узнаем, что это не удалось? это может сказать только метод reportResult () или что-то еще? - person Vulcan; 25.09.2017
comment
Тебе повезло? На этой неделе я переписывал свой поставщик учетных данных - такая важная часть безопасности Windows, и я разочарован тем, что Microsoft предоставляет разработчикам мало ресурсов. - person Jonathan Galentine; 28.09.2017
comment
Пока не повезло. Мы пишем некоторые обходные пути, но они не кажутся полезными. Я продолжу писать, если что-нибудь удастся. Пожалуйста, дайте нам знать, если найдете способ. - person Vulcan; 02.10.2017