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

时间:2014-08-06 22:55:24

标签: javascript node.js ldap edirectory

我正在尝试使用以下node.js文件实现基本的ldap绑定。不幸的是,我不断收到代码128的绑定错误。我在网上查找并没有找到代码128的引用。我试图搜索的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);

3 个答案:

答案 0 :(得分:6)

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

process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0";

我还没有充分研究,知道为什么会这样,但我在这里找到了这个答案:https://github.com/mikeal/request/issues/418

答案 1 :(得分:1)

通常在调试eDirectory问题时,请求访问iMonitor,以便您可以使用+ LDAP选项查看DStrace。这将显示LDAP服务器发回的内容,使故障排除更容易。

答案 2 :(得分:0)

为了增加Kaiser的答案,可以在此链接的顶部找到有关为代码添加process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0";的原因的解释:https://github.com/visionmedia/superagent/issues/205

可能修复:

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

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

默认情况下,NODE_TLS_REJECT_UNAUTHORIZED已更改为true。如果您选择将NODE_TLS_REJECT_UNAUTHORIZED设置为false,则会带来更多安全风险,我建议仅在私有网络上执行此操作,而不是在生产环境中。如果没有安全讨论兔子洞,最好使用由CA签署的证书。有关证书差异的更多信息可以在here找到。如果您的应用程序足够强大,可以与各种安全服务器建立多个连接,只有部分使用自签名证书,这也会导致问题,this link中再次提到。

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

另一方面,如果您正在使用普通的,非安全的ldap连接(而不是通过TLS),和/或您偶尔会遇到此错误,而其他时间它会通过,您应该尝试将ldap网址设置为LDAP服务器IP或负载均衡器IP(并使用端口3268到allow searching in all domains)。在较大的网络设置中,这将避免潜在的循环dns查询,有时会将您指向慢速服务器或无法路由到的服务器。