我有一個Web應用程序(.NET 3.5),它通過電子郵件向用戶發送通知。爲了做到這一點,我搜索Active Directory來查找每個人的電子郵件。如何使用登錄人員的憑據來搜索Active Directory?
此刻,我硬編碼自己的用戶名和密碼,像這樣以搜索廣告:
Dim entry As New DirectoryEntry("LDAP://companyad", "myUsername", "myPassword", AuthenticationTypes.Secure)
Dim srch As New DirectorySearcher(entry)
srch.Filter = [String].Format("(&(objectClass=person)(sAMAccountName={0}))", "someOtherUsername")
Dim result As SearchResult = srch.FindOne()
現在,很明顯,這不是很理想,我不希望這些證書硬編碼。我的網絡應用程序使用Windows身份驗證。它還使用模擬(作爲登錄用戶)來訪問文件和SQL Server。是否還有一種方法讓我「模仿」登錄用戶以搜索AD?
編輯1
我想我會更好地解釋爲什麼我選擇了這個答案。問題原來不是多跳問題或kerberos,因爲它似乎已經正確設置了這些。
我最近更改了我的應用程序,只允許通過web.config設置訪問某個組。我以前只允許訪問自己。我設立了這個小組,並加入了它。然後我刪除了硬編碼的憑據,並嘗試在沒有重新啓動計算機的情況下運行該應用程序。
根據我的網絡管理員,我不會在該新組下登錄,直到我重新啓動我的計算機,我認爲是什麼導致我的問題。所以,Preet的答案實際上是最準確的,因爲我需要將LDAP路徑傳遞給DirectoryEntry。
EDIT 2
我還需要註冊一個服務主體名稱。
我跑了這一點:
setspn -A HTTP/[dns name of the site] [machine name]
我的機器上。
感謝其他人的回答。
不幸的是,沒有。我得到這個異常:「Type:System.Runtime.InteropServices.COMException,mscorlib,Version = 2.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089 消息:發生操作錯誤。」有用,嗯? – Andrew 2010-03-04 05:55:58
檢查事件日誌中的內容。 – 2010-03-04 06:19:58