1

我正在尝试编写一个活动目录代理,它将接收搜索请求,运行一些代码,然后使用真实服务器重新创建请求。

我无法让它工作,这是到目前为止的代码:

 var ldap = require('ldapjs');
 var ActiveDirectory = require('activedirectory');
 var server = ldap.createServer();


server.bind('cn=root', function(req, res, next) {

    console.log('BIND REACHED');
  if (req.dn.toString() !== 'cn=root' || req.credentials !== 'somepassword')
    return next(new ldap.InvalidCredentialsError());

  res.end();
  return next();
});

 server.listen(389, '127.0.0.1', function() {
   console.log('LDAP server listening at %s', server.url);
 });

   var ad = new ActiveDirectory({
     url: 'ldap://127.0.0.1',
     baseDN: 'dc=lab,dc=ldapproxy,dc=local',
     username: 'root',
     password: 'somepassword'
 }); 
ad.findUser('root', function (err, results) {
                if (err) {
                    console.log('AD Login Failed: '+err);
                }
                else
                    console.log('AD Login Succeeded.');
                });

我得到的错误是: ProtocolError: InvalidDistinguishedNameError: root

似乎无论我如何或在 ActiveDirectory 凭据中放入什么,我都会收到相同的错误。但是,当我在真正的活动目录服务器上使用不同的凭据运行相同的代码时,它可以正常工作而不会出现任何错误。

我在这里想念什么? 我正在阅读的网站正在解释如何在 linux 上使用密码文件执行此操作,我没有使用 linux 或任何文件,也没有看到任何示例描述如何在绑定和搜索上配置服务器我写的。

编辑我忘了提到这个代码 snappit 是用于调试的,我知道我正在尝试连接到我刚刚创建的同一台服务器,这是为了测试目的和学习如何 ldap。

4

1 回答 1

0

错误说明了一切:root不是可用于绑定的有效专有名称。

在通用 LDAP(例如 OpenLDAP)中,您只能使用“用户名”执行绑定操作,该用户名是您要绑定的对象(用户,在 ldap 数据库中)的完全限定专有名称 (FQDN) . 那将是这样的:

CN=root,OU=Users,DC=example,DC=local

当然,这取决于用户帐户在数据库中的位置。

注意:在 Active Directory 中,绑定操作不限于用户的 FQDN - 还有其他几个选项可以在绑定期间用作用户名。我在之前的SO question中已经讨论过这个问题。但是,考虑到您看到的错误消息,我不确定ldapjs是否支持这些用户名格式。

于 2015-04-16T12:30:54.807 回答