LDAP绑定错误使用node.js和ldapjs

我正在尝试使用下面的node.js文件实现基本的ldap绑定。 不幸的是,我不断收到代码128的绑定错误。我在网上查找,发现没有代码128的引用。我试图search的LDAP服务器是一个eDirectory。 有没有人有这方面的经验,或者你有类似的问题? 我的节点版本是v0.10.22,我的ldapjs版本是v0.7.1

var ldap = require('ldapjs'); var creds = { url: "ldaps://ldap.url.com:636", bindDN: "cn=ldap,o=com" }; var opts = { filter: "(cn=username)", scope: "sub" }; function authDN(client, dn, password, cb) { client.bind(dn, password, function (err) { client.unbind(); cb(err === null, err); }); } function output(res, err) { if (res) { console.log('success'); } else { console.log(['Error',err.code, err.dn, err.message ]); } } var client = ldap.createClient(creds); authDN(client, '(cn=username)', 'password', output); 

当我将以下内容添加到我的文件的顶部时,这将进行身份validation:

 process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0"; 

我还没有研究足够的知道为什么这个作品,但我在这里find了这个答案: https : //github.com/mikeal/request/issues/418

一般来说,在debuggingeDirectory问题时,要求访问iMonitor,以便使用+ LDAP选项查看DStrace。 这将向您显示LDAP服务器正在发回的内容,从而使故障排除更容易。

为了增加Kaiser的回答,解释了为什么添加process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0"; 代码的工作可以在这个链接的顶部find: https : //github.com/visionmedia/superagent/issues/205 。

可能的修正:

  • 添加process.env.NODE_TLS_REJECT_UNAUTHORIZED = 0; 到节点v0.10.x(及以上)脚本的顶部
  • 在服务器上设置可信的CA证书,而不是自签名证书(必须具有服务器pipe理员权限并支付有效的证书)
  • 使用LDAP服务器IP或负载平衡器IP而不是DNS参数。

因为你正在使用安全协议(ldaps://而不是ldap://),而且我假设你正尝试使用自签名证书连接到服务器,所以如果使用节点v0,将会失败。 10.x(也可能是所有更高版本)以及您正在使用的代码/模块没有专门将process.env.NODE_TLS_REJECT_UNAUTHORIZED设置为false。

出于某种原因,NODE_TLS_REJECT_UNAUTHORIZED默认情况下已更改为true。 如果您select将NODE_TLS_REJECT_UNAUTHORIZED设置为false,那么您将面临更多的安全风险, 我build议仅在专用networking上进行此操作 ,而不要在生产环境中进行。 如果不考虑安全性讨论兔子洞,最好使用由CA签名的证书。 有关证书上的差异的更多信息可以在这里find。 如果您的应用程序足够健壮,可以与多个安全服务器进行多重连接,而这些安全服务器中只有一些使用自签名证书,这也会造成问题。

如果证书不是自签名的,那么很可能不应该得到这个错误,所以另一个可能的解决方法是在LDAP服务器上设置和使用受信任的CA证书。

另一方面,如果您正在使用正常,非安全的ldap连接(而不是通过TLS),并且/或者偶尔会遇到此错误,而其他时间则会经历,您应该尝试将ldap url设置为LDAP服务器IP或负载均衡器IP(并使用端口3268 允许在所有域中search )。 在较大的networking设置中,这将避免潜在的轮询dns查询,这些查询有时会指向一个缓慢的服务器或一个不能路由到的服务器。