如何在使用C#编写的Windows应用程序中使用Windows身份验证(本地计算机管理员用户)。
需要的是,每当用户打开我的Windows应用程序GUI时,它都应该验证本地管理员凭据,即使用户已经作为管理员登录。
这是Windows模拟吗?
LogonUser
API方法来检查用户名和密码。[DllImport]
。
如果您想显示标准的用户名/密码提示,则可以调用CredUIPromptForCredentials API函数;请参见此处
要检查用户是否为管理员,可以调用CheckTokenMembership
并检查用户是否在Administrators
组中。
或者,您可以调用NetUserGetInfo
级别1,并检查usri1_priv
是否为USER_PRIV_ADMIN
。
您还可以使用WMI或DirectoryServices。
System.Security.Principal
命名空间的WindowsIdentity类来实现。该类提供了一个静态方法getCurrent()
,返回一个WindowsIdentity对象。
下面是可以用来获取当前已登录用户详细信息的代码。
第二步: 验证用户提供的 Windows 凭据: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
);