2010-05-25 133 views
4

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

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

这是Windows冒充吗?

回答

8

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

如果您想显示标准的用户名/密码提示,您可以调用CredUIPromptForCredentials API函数;又见here

编辑

要检查用户是否是管理员,您可以拨打CheckTokenMembership并检查用户是否为Administrators小组。

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

您还可以使用WMI或DirectoryServices。

+0

我将如何使其特定于管理员用户?只需验证一个有效的本地管理员用户(不是域或任何其他本地用户)。 – Jango 2010-05-26 16:06:16

+0

您需要检查用户名是否在本地管理员组中。 http://msdn.microsoft.com/en-us/library/Aa376389%28VS.85%29.aspx – SLaks 2010-05-26 16:14:42

+1

要检查用户是否是管理员:我正在使用用户令牌(LogonUser方法的变量)。这里是代码: - WindowsIdentity identity = new WindowsIdentity(hToken); WindowsPrincipal principal = new WindowsPrincipal(identity); return principal.IsInRole(WindowsBuiltInRole.Administrator); – Jango 2010-05-28 19:44:19

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 
    ); 
+0

我将如何使它特定于管理员用户?只需验证一个有效的本地管理员用户(不是域或任何其他本地用户)。 – Jango 2010-05-26 16:06:33

1

可能有点晚,但要实现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 !!!"); 
相关问题