node.js 中的 Active Directory 代理

Active directory proxy in node.js

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

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

 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 凭据中如何输入或输入什么,我都会不断收到相同的错误。 但是当我 运行 在真实的活动目录服务器上使用不同凭据的相同代码时,它可以正常工作。

我在这里错过了什么? 我正在阅读的 site 解释了如何在 linux 上使用密码文件执行此操作,我没有使用 linux 或任何文件,我没有看到任何示例描述根据我写的内容如何在绑定和搜索上配置服务器。

EDIT 我忘了说这段代码 snappit 是用来调试的,我知道我正在尝试连接到我刚刚创建的同一台服务器,那是为了测试目的,并且学习如何使用 ldap。

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

在通用 LDAP(例如 OpenLDAP)中,您只能使用 "username" 执行绑定操作,它是对象(用户,在 ldap 数据库中)的完全限定可分辨名称 (FQDN) ) 要绑定的对象。那将是这样的:

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

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

注意:在 Active Directory 中,绑定操作不限于用户的 FQDN - 在绑定期间还有其他几个选项可用作用户名。考虑到您看到的错误消息,我在之前的文章中对此进行了介绍 SO question. However, I am unsure if ldapjs 支持这些用户名格式。