2010-12-07 46 views
2

我有一個使用System.DirectoryServices和LDAP進行身份驗證的.Net客戶端WPF應用程序。在應用程序啓動時,我想強制用戶使用他們的域帳戶重新進行身份驗證(這是他們如何登錄到Windows)。我知道我可以使用以下方式在連接可用時執行身份驗證。使用.Net在斷開連接時對Active Directory進行身份驗證

DirectoryEntry entry = new DirectoryEntry("LDAP://" + domain, 
      userName, password); 

皺紋是應用程序有時由可能沒有連接的遠程用戶使用。即使斷開連接,Windows本身仍允許域用戶登錄。是否有類似的方法來使用.Net框架在斷開連接的環境中對用戶進行身份驗證?

回答

2

相信我發現了一種使用advapi32.dll的LogonUser函數來完成此操作的方法。

Dim tokenHandle As New IntPtr(0) 
Const LOGON32_PROVIDER_DEFAULT As Integer = 0 
Const LOGON32_LOGON_INTERACTIVE As Integer = 2 
tokenHandle = IntPtr.Zero 
Dim returnValue As Boolean = LogonUser("<username>", "<domain>", "<password>", LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, tokenHandle) 

Private Declare Auto Function LogonUser Lib "advapi32.dll" (ByVal lpszUsername As [String], _ 
         ByVal lpszDomain As [String], ByVal lpszPassword As [String], _ 
         ByVal dwLogonType As Integer, ByVal dwLogonProvider As Integer, _ 
         ByRef phToken As IntPtr) As Boolean 

當斷開連接時,它顯示爲根據上次登錄的本地緩存版本進行驗證。

2

如果沒有連接,就沒有連接。 Windows維護該用戶最後一次登錄的緩存版本(意味着新用戶無法登錄到沒有連接到域的計算機)。您可以使用本地系統身份驗證來確定哪個用戶正在使用系統,並根據此權限確定本地緩存權限。這些方法仍然位於System.DirectoryServices命名空間內,但解析查詢的位置會發生變化(我不相信它會在本地接受LDAP查詢)。

編輯:
您還可以找到一些班級,在System.Security/System.Security.Permissions命名空間,將有助於這些需求。

+0

你是對的,它不會允許LDAP查詢,除非你登錄到域控制器,在這種情況下,這不會是一個問題。 – CodingGorilla 2010-12-07 19:20:13

+0

@Coding Gorilla - Tru dat。我的假設是,這是針對遠程系統上的應用程序。如果你在一個DC上,那麼這個網絡在技術上從未斷開。 – 2010-12-07 19:21:18

相關問題