2010-04-27 79 views
2
查詢LDAP的DirectoryEntry

我有用戶登錄到通過Active Directory我的應用程序,然後從廣告信息拉,以爭取有關該用戶的信息,像這樣:問題在ASP.NET

Dim ID as FormsIdentity = DirectCast(User.Identity, FormsIdentity) 
Dim ticket as FormsAuthenticationTicket = ID.Ticket 
Dim adDirectory as New DirectoryEntry("LDAP://DC=my,DC=domain,DC=com") 
Dim adTicketID as String = ticket.Name.Substring(0, 5) 
Session("people_id") = adDirectory.Children.Find("CN=" & adTicketID).Properties("employeeID").Value 
Session("person_name") = adDirectory.Children.Find("CN=" & adTicketID).Properties("displayName").Value 

現在,我想能夠模擬其他用戶......這樣我就可以「測試」應用程序,因此我在頁面上添加了一個文本框和一個按鈕,當點擊該按鈕時,文本被分配到會話變量,如下所示:

Session("impersonate_user") = TextBox1.Text 

當頁面重新加載時,我檢查是否Session(「impersonate_user」)h爲除「」等,然後一個值嘗試使用該會話變量像這樣來查詢Active Directory:

If CStr(Session("impersonate_user")) <> "" Then 
    Dim adDirectory as New DirectoryEntry(LDAP://DC=my,DC=domain,DC=com") 
    Dim adTicketID as String = CStr(Session("impersonate_user")) 
    Session("people_id") = adDirectory.Children.Find("CN=" & adTicketID).Properties("employeeID").Value 
    Session("person_name")= adDirectory.Children.Find("CN=" & adTicketID).Properties("displayName").Value 
Else 
    [use the actual ticket.name to get this info.] 
End If 

但是,這是行不通的。相反,它會在第一個會話行中引發錯誤,指出「DirectoryServicesCOMException未被用戶代碼處理」服務器上沒有這樣的對象。 爲什麼?我知道我給它一個有效的用戶名!在會議的演員中發生了一些奇怪的事情?代碼在每個方法之間基本相同,只不過在一個方法中,而不是從ticket.Name中拉出來,我從一個會話變量中提取用於登錄的會話,我將使用AD進行查找。

回答

-1

也許您的進程正在運行的身份需要訪問活動目錄的權限。您可以通過更改應用程序在IIS應用程序池中運行的身份來完成此操作。

在文本框中輸入什麼內容?

+0

嗯...但AD查詢工作正常,當我將adTicketID設置爲ticket.name時,它只是在我將其設置爲CStr(Session(「impersonate_user」))時不起作用。在本例中,我將對應用程序「驗證」的登錄名可能是bj442,而文本框可能包含相同的「bj442」或其他人(「rj442」) – davemackey 2010-04-27 20:47:00