如何触发Windows进行用户凭据提示



我正在寻找一个同时适用于Windows 8.1和Windows 10的想法/解决方案。

对于WPF应用程序中的关键操作,我希望用户再次针对操作系统进行显式身份验证。网络上有许多自定义解决方案,如NuGet包,看起来像是询问用户密码的Windows提示。就像出现的那个一样,如果您试图访问未通过身份验证的网络共享。

我不想使用那些自定义的解决方案,我想使用操作系统提供的解决方案(如果有的话(。

详细地说,我正在寻找类似的东西:

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

是否存在这样的WindowsAPI?

编辑:WindowsAPI应该有自己的UI,在最好的情况下,它会验证凭据,并且不存储任何凭据。

bool authenticated = [WindowsAPI].Authenticate(identity);它是否应该要求用户再次输入登录名和密码?

您可以尝试使用Windows API LogoUser。但是,它不提供收集用户名和密码的UI。您可以尝试创建一个包含两个文本框的对话框。

IPublicClientApplicationAcquireToken*两种方法。请检查AcquireToken ByIntegratedWindowsAuth。然而,它可以与AzureAD一起获得代币,所以我不确定它是否符合您的要求。

总体答案是:不,不存在包含自己的UI并额外验证输入凭据的Windows API。

简而言之,我使用了CredUIPromptForWindowsCredentials,它弹出了一个可配置的操作系统对话框来输入凭据,CredUnPackAuthenticationBuffer来解包凭据,而LogonUser来验证解包凭据。最后使用CoTaskMemFree清除CredUIPromptForWindowsCredentials分配的内存。

MS文档:

  • CredUIPromptForWindowsCredentials
  • CredUnPackAuthenticationBuffer
  • LogoUser
  • CoTaskMemFree

p/Invoke Docs:

  • CredUIPromptForWindowsCredentials
  • CredUnPackAuthenticationBuffer
  • LogoUser
  • CoTaskMemFree

最新更新