我让用户通过Active Directory登录我的应用程序,然后从他们的AD信息中获取有关该用户的信息,如下所示:
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”)是否具有“”之外的值,然后尝试使用此会话变量查询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查找登录。
答案 0 :(得分:-1)
根据需要访问活动目录的权限,您的进程可能正在运行。您可以通过在IIS应用程序池中更改应用程序运行的标识来执行此操作。
在文本框中输入了什么内容?