[英]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.