7

我正在尝试使用以下 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);
4

3 回答 3

7

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

process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0";

我没有进行足够的研究以知道为什么会这样,但我在这里找到了这个答案:https ://github.com/mikeal/request/issues/418

于 2014-09-26T16:44:46.797 回答
2

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

于 2014-12-15T00:35:23.550 回答
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://),并且我假设您正在尝试使用自签名证书连接到服务器,所以如果使用节点 v0,您将失败。 10.x(可能还有所有更高版本)并且您使用的代码/模块没有专门将 process.env.NODE_TLS_REJECT_UNAUTHORIZED 设置为 false。

NODE_TLS_REJECT_UNAUTHORIZED 默认更改为 true 是有原因的。如果您选择将 NODE_TLS_REJECT_UNAUTHORIZED 设置为 false,则会带来更多安全风险,我建议您最好只在私有网络上执行此操作,而不要在生产环境中执行此操作。无需陷入安全讨论兔子洞,最好使用由 CA 签名的证书。可以在此处找到有关证书差异的更多信息。如果您的应用程序足够健壮,可以与各种安全服务器建立多个连接,其中只有一些使用自签名证书,这也可能会导致问题,在此链接中再次提到。

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

另一方面,如果您使用的是正常的、非安全的 ldap 连接(不是通过 TLS),并且/或者您只是偶尔在其他时候出现此错误,您应该尝试将 ldap url 设置为 LDAP 服务器IP 或负载平衡器 IP(并使用端口 3268 以允许在所有域中搜索)。在较大的网络设置中,这将避免潜在的轮询 dns 查询,这些查询有时会将您指向慢速服务器或您无法路由到的服务器。

于 2015-11-06T00:01:12.573 回答