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