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