如何在用C#编写的windows应用程序中使用Windows身份验证(本地计算机管理员用户)。如何在Windows应用程序中使用Windows身份验证?
需要每当用户打开我的Windows应用程序GUI时,即使用户以管理员身份登录,它仍应验证本地管理员凭据。
这是Windows冒充吗?
如何在用C#编写的windows应用程序中使用Windows身份验证(本地计算机管理员用户)。如何在Windows应用程序中使用Windows身份验证?
需要每当用户打开我的Windows应用程序GUI时,即使用户以管理员身份登录,它仍应验证本地管理员凭据。
这是Windows冒充吗?
可以调用API LogonUser
方法来检查用户名和密码。
你可以看到[DllImport]
here。
如果您想显示标准的用户名/密码提示,您可以调用CredUIPromptForCredentials API函数;又见here
要检查用户是否是管理员,您可以拨打CheckTokenMembership
并检查用户是否为Administrators
小组。
或者,您可以调用NetUserGetInfo
级别1并检查usri1_priv
是否为USER_PRIV_ADMIN
。
您还可以使用WMI或DirectoryServices。
一种方式是,如果您的用户将作为标准帐户运行,如果您将清单文件设置为以管理员身份运行,则会始终提示输入管理员用户名和密码。
什么,你可能找虽然是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
);
我将如何使它特定于管理员用户?只需验证一个有效的本地管理员用户(不是域或任何其他本地用户)。 – Jango 2010-05-26 16:06:33
可能有点晚,但要实现Window Authentication Functionality来一个C#桌面应用程序,有两个步骤可以完成以下步骤。
第1步:获取当前登录的用户的详细信息:
这是非常简单的。我们可以通过使用System.Security.Principal
命名空间的WindowsIdentity类来实现此目的。这个类提供了一个静态方法,getCurrent()
,它返回一个WindowsIdentity对象。 贝娄是您可以用来获取当前登录用户详细信息的代码。
第2步:由用户提供的验证Windows凭据:
需要从用户询问域名,用户名,密码,这些值传递给互操作的服务。 与上面相比,这很复杂,因为我们需要使用IntropServices调用Windows API。为了实现这一点,我们需要添加一个外部函数声明,然后调用该函数。以下代码将帮助您更好地理解这一点。
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 !!!");
我将如何使其特定于管理员用户?只需验证一个有效的本地管理员用户(不是域或任何其他本地用户)。 – Jango 2010-05-26 16:06:16
您需要检查用户名是否在本地管理员组中。 http://msdn.microsoft.com/en-us/library/Aa376389%28VS.85%29.aspx – SLaks 2010-05-26 16:14:42
要检查用户是否是管理员:我正在使用用户令牌(LogonUser方法的变量)。这里是代码: - WindowsIdentity identity = new WindowsIdentity(hToken); WindowsPrincipal principal = new WindowsPrincipal(identity); return principal.IsInRole(WindowsBuiltInRole.Administrator); – Jango 2010-05-28 19:44:19