如何在用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