如何触发 Windows 用户凭据提示?

How to trigger Windows for user credentials prompt?

我正在寻找适用于 Windows 8.1 和 Windows 10 的 idea/solution。

对于我的 WPF 应用程序中的关键操作,我希望用户再次针对操作系统进行显式身份验证。 Web 上存在许多自定义解决方案,例如看起来像 Windows 提示的 NuGet 包,要求用户输入密码。与显示的一样,如果您尝试访问网络共享,则您未通过身份验证。

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

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

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

这样的WindowsAPI存在吗?

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

此致, 克里斯蒂安

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

您可以尝试使用Windows API LogonUser。但是它不提供 UI 来收集用户名和密码。您可以尝试自己创建一个带有两个文本框的对话框。

IPublicClientApplicationAcquireToken*方法。请检查 AcquireTokenByIntegratedWindowsAuth。 但是它与 AzureAD 一起使用来获取令牌,所以我不确定它是否符合您的要求。

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

简而言之,我使用 CredUIPromptForWindowsCredentials 弹出一个可配置的操作系统对话框来输入凭据,CredUnPackAuthenticationBuffer 解压凭据,LogonUser 验证解压后的凭据。最后使用 CoTaskMemFree.

清除 CredUIPromptForWindowsCredentials 分配的内存

MS 文档:

P/Invoke 文档: