如何在C# WPF应用程序中使用标准的内置Windows登录工具在执行操作之前验证用户?

kq0g1dla  于 2023-03-19  发布在  C#
关注(0)|答案(1)|浏览(155)

如何在C# WPF应用程序中使用标准的内置Windows登录工具在执行请求的操作之前验证本地用户?我还被限制为.NET Framework 4.8。
我希望避免“自己滚动”,以确保使用用户熟悉的标准工具,并消除凭据信息泄漏的任何风险,甚至是潜在的网络钓鱼的最小建议。
我见过其他用户应用程序这样做,例如,Windows Hello PIN。
非常感谢您的建议/帮助。

yfwxisqw

yfwxisqw1#

您可以使用Windows API LogonUser函数。

[DllImport("advapi32.dll", SetLastError = true, BestFitMapping = false, ThrowOnUnmappableChar = true)]
[return: MarshalAs(UnmanagedType.Bool)]
internal static extern bool LogonUser(
[MarshalAs(UnmanagedType.LPStr)] string pszUserName,
[MarshalAs(UnmanagedType.LPStr)] string pszDomain,
[MarshalAs(UnmanagedType.LPStr)] string pszPassword,
int dwLogonType,
int dwLogonProvider,
ref IntPtr phToken);

[DllImport("kernel32.dll")]
private static extern bool CloseHandle(IntPtr hObject);

public static void Main(string[] args)
{
    var domain = "...";
    var user = "...";
    var pwd = "...";
    var token = new IntPtr();
    var success = false;
    try
    {
        success = LogonUser(user, domain, pwd, 2/*LOGON32_LOGON_INTERACTIVE*/, 0, ref token);
    }
    finally
    {
        CloseHandle(token);
    }
}

根据您的要求,您可能需要使用CredUIPromptForCredentials

相关问题