我有一个较旧的ASP / VBScript应用程序,我正在维护/升级,目前正在使用旧的/折旧的方式来收集个人资料信息 - 如下所示:
strNTUser = Request.ServerVariables("AUTH_USER")
strNTUser = replace(strNTUser, "\", "/")
Set strNTUserInfo = GetObject("WinNT://"+strNTUser)
'You get the idea'
当我需要的只是全名和描述时,这很好。现在我需要访问一些额外的配置文件信息,但我需要使用LDAP而不是WinNT。我已经谷歌,直到我失明,但对于我的生活,我似乎无法通过LDAP连接并获取我需要的信息。
如何根据AUTH_USER获取名字,姓氏和员工ID?
更新:我从一开始就认为ADSI或某些类似的界面是必需的,但我显然是一个ADIdiot而且我没有得到任何有用的提示 - 更不用说帮助 - 从我发现的任何东西MSDN或TechNet。更明确的帮助会很好......
答案 0 :(得分:4)
我确信这样做可能会有一些更有效的方法,但这是我经过大量搜索,尝试和咬牙切齿后最终使用的代码......
Dim strNTUser, strUser, strDN, strRootTDSE
Dim objRootDSE, objConnection, objCommand, objRecordSet, objUser, objNTUserInfo
strNTUser = Request.ServerVariables("AUTH_USER")
strUser = Mid(strNTUser,(instr(1,strNTUser,"\")+1),len(strNTUser))
Set objConnection = Server.CreateObject("ADODB.Connection")
Set objCommand = Server.CreateObject("ADODB.Command")
objConnection.Provider = "ADsDSOObject"
objConnection.Open "Active Directory Provider"
Set objCommand.ActiveConnection = objConnection
'objCommand.Properties("Page Size") = 1000'
objCommand.Properties("Searchscope") = 2 'ADS_SCOPE_SUBTREE
Set objRootDSE = GetObject("LDAP://rootDSE")
strRootTDSE = objRootDSE.Get("defaultNamingContext")
Set objRootDSE = Nothing
objCommand.CommandText = _
"SELECT distinguishedName FROM 'LDAP://" & strRootTDSE & "' " & _
"WHERE objectCategory='user' AND sAMAccountName = '" & strUser & "'"
Set objRecordSet = objCommand.Execute
If Not objRecordSet.BOF Then objRecordSet.MoveFirst
If Not objRecordSet.EOF Then
strDN = objRecordSet.Fields("distinguishedName").Value
End If
Set objConnection = Nothing
Set objCommand = Nothing
Set objRecordSet = Nothing
Set objUser = GetObject("LDAP://" & strDN)
'I can now use objUser to get the details'
我很乐意接受任何重构的代码,以及为什么我现在必须将网站降级为“基本身份验证”才能使其正常工作。
作为旁注,我尝试尽可能少地进行硬编码,以便将其发送回我从原始代码中获取的开源项目。
答案 1 :(得分:1)
在这种情况下,您应该使用ADSI连接到目录提供程序(LDAP)。 Here is an example使用经典的ASP。