代码之家  ›  专栏  ›  技术社区  ›  AnonJr

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

  •  4
  • AnonJr  · 技术社区  · 17 年前

    我有一个较旧的ASP/VBScript应用程序,我正在维护/升级它,它当前使用的是收集配置文件信息的较旧/已贬值的方法,如下所示:

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

    当我只需要完整的名字和描述时,这很好。现在我需要访问一些额外的配置文件信息,但是我需要使用LDAP而不是Winnt。在我失明之前,我一直在谷歌搜索,但在我的生活中,我似乎无法全神贯注地通过LDAP连接和获取我需要的信息。

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

    更新 :我从一开始就知道需要ADSI或类似的接口,但我显然是一个助手,从我在msdn或technet上找到的任何东西都得不到有用的提示,更不用说帮助了。更明确的帮助会更好…

    2 回复  |  直到 14 年前
        1
  •  4
  •   AnonJr    17 年前

    我肯定有一种更有效的方法可以做到这一点,但这是我在搜索、尝试和咬牙切齿之后使用的代码……

    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'
    

    我很乐意接受任何重构的代码,这也是为什么我现在必须将站点降低到“基本身份验证”才能工作的原因。

    作为旁注,我已经尽可能少地硬编码,这样我就可以把它发送回我从中获得原始代码的开源项目。

        2
  •  1
  •   JP Alioto    17 年前

    你应该使用 ADSI 在这种情况下连接到目录提供程序(LDAP)。 Here is an example 经典ASP。