簡體   English   中英

如何在Windows應用程序中使用Windows身份驗證?

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM