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

3

我正在寻找一个可以在Windows 8.1和Windows 10上使用的解决方案/想法。

对于我WPF应用程序中的关键操作,我希望用户再次明确地根据操作系统进行身份验证。在Web上存在许多自定义解决方案,例如NuGet软件包,看起来像是询问用户密码的Windows提示框。就像您尝试访问未经过身份验证的网络共享时出现的那个提示框。

我不想使用这些自定义解决方案,我想使用操作系统提供的任何解决方案。

具体而言,我正在寻找类似于以下内容的解决方案:

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

是否存在这样的WindowsAPI?

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


1
尝试使用PInvoke调用CredUIPromptForCredentialsA文档 - Eldar
2个回答

1

bool authenticated = [WindowsAPI].Authenticate(identity);

这段代码检查用户是否通过身份验证,需要进一步确定是否需要再次要求用户输入登录名和密码。

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

还有IPublicClientApplicationAcquireToken*方法。请查看AcquireTokenByIntegratedWindowsAuth。但是它与Azure AD一起工作以获取令牌,因此我不确定它是否适合您的要求。


是的,API 应该有自己的用户界面。 - Christian St.

0

总的答案是:没有,不存在一个包含自己的用户界面并且验证输入凭据的Windows API。

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

MS Docs:

P/Invoke文档:


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接