在经典 ASP/VBScript 应用程序中通过 LDAP 访问员工 ID

问题描述 投票:0回答:3

我有一个旧的 ASP/VBScript 应用程序,我正在维护/升级它,它目前使用旧的/已弃用的方式来收集配置文件信息 - 如下所示:

strNTUser = Request.ServerVariables("AUTH_USER")
strNTUser = replace(strNTUser, "\", "/")
Set strNTUserInfo = GetObject("WinNT://"+strNTUser)
'You get the idea'

当我需要的只是全名和描述时,这很好。现在我需要访问一些附加的配置文件信息,但我需要使用 LDAP 而不是 WinNT。我一直在 Google 上搜索,直到我失明为止,但在我的一生中,我似乎无法全神贯注于通过 LDAP 连接并获取我需要的信息。

我需要做什么才能根据 AUTH_USER 获取名字、姓氏和员工 ID?

更新:我从一开始就认为需要 ADSI 或一些类似的接口,但我显然是一个 ADIdiot,并且从我在 MSDN 或 TechNet 上找到的任何内容中都没有得到任何有用的提示,更不用说帮助了。更明确的帮助会很好......

asp-classic vbscript ldap
3个回答
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
投票

在这种情况下,您应该使用 ADSI 连接到目录提供程序 (LDAP)。 这是一个使用经典 ASP 的示例


0
投票

我想使用 LDAPS,但如果我尝试使用 LDAPS://domain:636 它会失败,它会显示找不到表 但如果我尝试使用 LDAP://domain:636 它可以工作。如何使 LDAPS://domain:636 正常工作?使用经典 ASP

© www.soinside.com 2019 - 2024. All rights reserved.