2010-05-25 131 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 !!!"); 
相關問題