Как вызвать Windows для запроса учетных данных пользователя? - PullRequest
1 голос
/ 02 апреля 2020

Я ищу идею / решение, которое работает как на Windows 8.1, так и на Windows 10.

Для критических действий в моем приложении WPF я хочу, чтобы пользователь снова явным образом аутентифицировался на работающем система. В Интернете существует множество пользовательских решений, таких как пакеты NuGet, которые выглядят как приглашение Windows, запрашивающее у пользователя пароль. Как и тот, который отображается, если вы пытаетесь получить доступ к сетевым ресурсам, для которых вы не прошли аутентификацию.

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

Подробно я ищу что-то подобное:

WindowsIdentity identity = WindowsIdentity.GetCurrent();
bool authenticated = [WindowsAPI].Authenticate(identity);
if(authenticated)
{
    //do critical action
}

Существует ли такой WindowsAPI?

РЕДАКТИРОВАТЬ: WindowsAPI должен иметь собственный пользовательский интерфейс и, в лучшем случае, проверяет учетные данные и не хранит их.

С уважением, Кристиан

Ответы [ 2 ]

1 голос
/ 02 апреля 2020

bool authenticated = [WindowsAPI].Authenticate(identity); Должен ли он попросить пользователя ввести логин и пароль еще раз?

Вы можете попробовать использовать Windows API LogonUser . Однако он не предоставляет интерфейс для сбора имени пользователя и пароля. Вы можете попытаться создать диалоговую форму с двумя текстовыми полями самостоятельно.

Есть методы IPublicClientApplication и AcquireToken*. Пожалуйста, проверьте AcquireTokenByIntegratedWindowsAuth . Однако он работает с AzureAD для получения токена, поэтому я не уверен, что он соответствует вашим требованиям.

0 голосов
/ 06 апреля 2020

Общий ответ: нет, не существует API Windows, который включает в себя собственный пользовательский интерфейс и дополнительно проверяет введенные учетные данные.

Короче говоря, я использовал CredUIPromptForWindowsCredentials, который выскакивает настраиваемый диалоговое окно операционной системы для ввода учетных данных, CredUnPackAuthenticationBuffer для распаковки учетных данных и LogonUser для проверки распакованных учетных данных. В конце очистите память, выделенную CredUIPromptForWindowsCredentials, используя CoTaskMemFree.

MS Docs:

P / Invoke Документы:

...