3

我的代码可以正常连接到 Active Directory 服务器:

Dim oDSObj: Set oDSObj = GetObject("LDAP:")
Dim oAuth: Set oAuth = oDSObj.OpenDSObject("LDAP://ldap.domain.com", "DOMAIN\username", "password", 1)

但是,我似乎无法弄清楚使其对 OpenLDAP 服务器起作用的语法:

Dim oDSObj: Set oDSObj = GetObject("LDAP:")
Dim oAuth: Set oAuth = oDSObj.OpenDSObject("LDAP://ldap.domain.com/ou=Users", "username", "password", 1)

老实说,在 LDAP 方面我有点不习惯,所以我不明白 dc vs cn vs ou 是什么意思(我知道它们代表组织单位、通用名称等)但我不明白当您需要将其附加到查询时。

连接到 Active Directory 服务器后,以下代码会对其进行查询:

dc = ""
Set oConn = Server.CreateObject("ADODB.Connection")
oConn.Provider = "ADSDSOObject"
oConn.Open "Ads Provider", "DOMAIN\username", "password"            '
Dim rs: Set rs = oConn.Execute("<LDAP://ldap.domain.com" & dc & ">;(& (objectCategory=person)(objectClass=user)(sAMAccountName=" & GetLDAPUserName(sPerson) & "));name,mail,telephoneNumber;subtree")

但我意识到 sAMAccountName 是特定于 AD 的东西,因此 openLDAP 代码将需要不同的语法。

用户是“ldapuser”,密码为“password”,存储在此处:ou=Users,dc=domain,dc=com

连接到该 LDAP 服务器并查询帐户信息的代码是什么?

4

2 回答 2

1

我终于想通了:

sUser = "myusername"
sDN = "cn=" & sUser & ",ou=people,dc=company,dc=com"
sRoot = "LDAP://ldapservername.com/dc=company,dc=com"

Dim oDS: Set oDS = GetObject("LDAP:")
Dim oAuth: Set oAuth = oDS.OpenDSObject(sRoot, sDN, "password", &H0200)

Dim oConn: Set oConn = CreateObject("ADODB.Connection")
oConn.Provider = "ADSDSOObject"
oConn.Open "Ads Provider", sDN, "password"

Dim rs
Set rs = oConn.Execute("<" & sRoot & ">;(uid=" & sUser & ");cn,mail,telephoneNumber;subtree")

wscript.echo rs("cn").value
wscript.echo rs("mail").value
wscript.echo rs("telephoneNumber").value
于 2009-04-03T13:39:57.907 回答
1

非常感谢您的代码 Michael。
我已将其修改为使用中央 OpenLDAP 服务器简单地验证用户(用户密码)。这是对我有用的代码(MSAccess 2003):

sUser = "TheUserName"
sDN = "uid=" & sUser & ",o=users,dc=MyDomain,dc=it"
sRoot = "LDAP://MyLDAPServer/o=users,dc=MyDomain,dc=it"

Dim oDS: Set oDS = GetObject("LDAP:")

On Error GoTo AuthError
Dim oAuth: Set oAuth = oDS.OpenDSObject(sRoot, sDN, "ThePassword", &H200)
On Error GoTo 0

MsgBox "Login Successful"
Exit Sub

AuthError:
If Err.Number = -2147023570 Then
    MsgBox "Wrong Username or password !!!"
End If
On Error GoTo 0
于 2012-04-13T15:07:30.683 回答