如何在Windows应用程序中使用Windows身份验证?

Jan*_*ngo 7 c# windows winforms

如何在用C#编写的Windows应用程序中使用Windows身份验证(本地机器管理员用户).

需要的是每当用户打开我的Windows应用程序GUI时,即使用户以管理员身份登录,它也应该验证本地管理员凭据.

这个窗户是假冒吗?

SLa*_*aks 8

您可以调用LogonUserAPI方法来检查用户名和密码.
你可以在[DllImport] 这里看到.

如果要显示标准用户名/密码提示,可以调用CredUIPromptForCredentials API函数; 另见这里

编辑

要检查用户是否是管理员,您可以呼叫CheckTokenMembership并检查用户是否在该Administrators组中.

另外,您也可以拨打NetUserGetInfo1级,并检查是否usri1_privUSER_PRIV_ADMIN.

您还可以使用WMI或DirectoryServices.


Ali*_*Ali 5

可能有点晚了,但要实现C# 桌面应用程序的窗口身份验证功能 ,需要完成以下两个步骤。

步骤1:获取当前登录的用户详细信息:

这非常简单。我们可以通过使用命名空间的 WindowsIdentity 类来实现这一点System.Security.Principal。此类提供了一个静态方法 ,getCurrent()它返回一个 WindowsIdentity 对象。下面是可用于获取当前登录用户详细信息的代码。

步骤 2:验证用户提供的 Windows 凭据:

需要向用户询问域名、用户名、密码,以将这些值传递给互操作服务。与上面相比,这并不复杂,因为我们需要使用 IntropServices 调用 Windows API。为此,我们需要添加 extern 函数声明,然后调用该函数。以下代码将帮助您更好地理解这一点。

bool issuccess = false;
string username = GetloggedinUserName();
if (username.ToLowerInvariant().Contains(txtUserName.Text.Trim().ToLowerInvariant()) && username.ToLowerInvariant().Contains(txtDomain.Text.Trim().ToLowerInvariant()))
    {
        issuccess = IsValidateCredentials(txtUserName.Text.Trim(), txtPwd.Text.Trim(), txtDomain.Text.Trim());
    }

if (issuccess)
    MessageBox.Show("Successfuly Login !!!");
else
    MessageBox.Show("User Name / Password / Domain is invalid !!!");
Run Code Online (Sandbox Code Playgroud)