node.js中的Active directory代理

node.js中的Active directory代理,node.js,active-directory,ldap,ldapjs,Node.js,Active Directory,Ldap,Ldapjs,我正在尝试编写一个activty目录代理,它将接收搜索请求,运行一些代码,然后用真正的服务器重新创建请求 我无法让它工作,以下是到目前为止的代码: var ldap = require('ldapjs'); var ActiveDirectory = require('activedirectory'); var server = ldap.createServer(); server.bind('cn=root', function(req, res, next) { co

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

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

 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:InvalidDifferentizedNameError:root

似乎无论我如何或在ActiveDirectory凭据中输入什么,我都会得到相同的错误。 但是,当我在真正的active directory服务器上使用不同的凭据运行相同的代码时,它不会出现任何错误

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

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

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

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

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

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


注意:在Active Directory中,绑定操作不限于用户的FQDN-在绑定期间还可以使用其他几个选项作为用户名。我在上一篇文章中已经谈到了这一点。但是,考虑到您看到的错误消息,我不确定是否支持这些用户名格式。

Hi,那么根据您的说法,我必须有某种用户数据库?因为我一直在试图到达“console.log”行的“BIND reach”所以我可以告诉你这些请求是可以收到的。ActiveDirectory库使用ldapjs,并支持这些用户名。如何配置服务器的DC&OU?它只用于身份验证目的,所以我想我可以对thoseOU=Users&DC=example,DC=local使用一个简单的字符串,然后任何不匹配的请求都可以删除。但是我该如何在我的服务器中配置它们呢?我很累,所以我错过了这一部分。错误说明了一切:root…,我在上面提到过,尝试使用相同的代码绑定到真正的active directory服务器,确实有效。区别只是在细节上,所以我假设在接收绑定请求之前,我需要以某种方式配置树。但根据本教程,唯一的方法是通过文件…我不确定你在问什么…:尝试打印错误的堆栈跟踪,并检查自己它是否来自对new ActiveDirectory或ad.findUser的调用。如果有其他方法可以浏览Active Directory,请尝试获取用户根目录的FQDN并使用该字符串绑定。应该有用的。啊哈!我仔细检查了密码。。。您正在创建ldap服务器,然后使用activedirectory模块绑定到它。在这种情况下,使用cn=root绑定。应该这样做。