如何在用C#编写的Windows应用程序中使用Windows身份验证(本地计算机管理员用户)。
需要的是每当用户打开我的Windows应用程序GUI时,即使用户以管理员身份登录,它也应该对本地管理员凭据进行身份验证。
这个窗口是假冒吗?
答案 0 :(得分:8)
您可以调用LogonUser
API方法来检查用户名和密码
您可以看到[DllImport]
here。
如果您想显示标准的用户名/密码提示,可以调用CredUIPromptForCredentials API函数;另见here
要检查用户是否是管理员,您可以致电CheckTokenMembership
并检查该用户是否在Administrators
群组。
或者,您可以致电NetUserGetInfo
级别1并检查usri1_priv
是否为USER_PRIV_ADMIN
。
您还可以使用WMI或DirectoryServices。
答案 1 :(得分:2)
一种方法是,如果您的用户将作为标准帐户运行,如果您将清单文件设置为以管理员身份运行,那么它将始终提示输入管理员用户名和密码。
您可能正在寻找的是用于验证身份验证信息的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
);
答案 2 :(得分:2)
可能有点迟了但是为了实现{#3}}到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 !!!");