繁体   English   中英

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

[英]How to use Windows Authentication in Windows Application?

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

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

这个窗户是假冒吗?

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

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

编辑

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

或者,您可以调用NetUserGetInfo级别1并检查usri1_priv是否为USER_PRIV_ADMIN

您还可以使用WMI或DirectoryServices。

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

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

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

第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 !!!");

一种方法是,如果您的用户将作为标准帐户运行,如果您将清单文件设置为以管理员身份运行,那么它将始终提示输入管理员用户名和密码。

您可能正在寻找的是用于验证身份验证信息的LogonUser Win32 API:

[DllImport("advapi32.dll", SetLastError=true)]
public static extern bool LogonUser(
    string lpszUsername, 
    string lpszDomain, 
    string lpszPassword, 
    int dwLogonType, 
    int dwLogonProvider, 
    out IntPtr phToken
    );

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM