【问题标题】:LDAP Bind Error using node.js and ldapjs使用 node.js 和 ldapjs 的 LDAP 绑定错误
【发布时间】:2014-09-30 01:13:54
【问题描述】:

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

【问题讨论】:

  • LDAP 对于开始工作来说绝对是一场噩梦。我的建议是首先使用 LDAP 客户端工具进行身份验证,然后再返回您的代码。否则,当需要调整配置时,您将花费大量时间更改代码。
  • 我的配置是正确的。它在与安全 LDAP 端口上的服务器的绑定部分失败。我可以在非安全端口上搜索用户,但是当我尝试在安全端口上搜索用户时,出现错误 128。
  • 我没有看到 call 'bind' 方法
  • 我已经添加了绑定方法。我仍然遇到同样的错误。
  • 您能否查看 eDirectory 服务器日志以查看是否有更多关于错误 128 的信息?

标签: javascript node.js ldap edirectory


【解决方案1】:

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

process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0";

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      为了补充 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 签名的证书。有关证书差异的更多信息,请参见 here。如果您的应用程序足够健壮,可以与各种安全服务器建立多个连接,其中只有一些使用自签名证书,这也可能会导致问题,在 this link 中再次提到。

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-04-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-10-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多