Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用node.js和ldapjs时发生LDAP绑定错误_Javascript_Node.js_Ldap_Edirectory - Fatal编程技术网

Javascript 使用node.js和ldapjs时发生LDAP绑定错误

Javascript 使用node.js和ldapjs时发生LDAP绑定错误,javascript,node.js,ldap,edirectory,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: "c

我正试图用下面的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);

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

process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0";

我还没有进行足够的研究来了解为什么会这样,但我在这里找到了答案:

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

为了补充Kaiser的答案,请解释为什么添加
process.env.NODE\u TLS\u REJECT\u UNAUTHORIZED=“0”可在此链接顶部找到可能工作的代码:

潜在修复:

  • 添加
    process.env.NODE\u TLS\u REJECT\u UNAUTHORIZED=0到节点v0.10.x(及更高版本)的脚本顶部
  • 在服务器上设置受信任的CA证书,而不是自签名证书(必须具有服务器管理员权限并支付有效证书的费用)
  • url参数使用LDAP服务器IP或负载平衡器IP而不是dns
由于您使用的是安全协议(ldaps://而不是ldap://),并且我假设您正试图使用自签名证书连接到服务器,因此如果使用节点v0.10.x(可能还有所有更高版本),您将失败并且您正在使用的代码/模块没有专门将process.env.NODE\u TLS\u REJECT\u UNAUTHORIZED设置为false

由于某种原因,节点\u TLS\u REJECT\u UNAUTHORIZED默认更改为true。如果您选择将NODE_TLS_REJECT_UNAUTHORIZED设置为false,则会带来更多的安全风险,我建议只在专用网络上执行此操作,最好不要在生产环境中执行。在没有安全性讨论的情况下,最好使用CA签署的证书。可以找到有关证书差异的更多信息。如果您的应用程序足够健壮,可以与各种安全服务器建立多个连接,其中只有一些服务器使用自签名证书,这也可能会导致问题,如中所述

如果证书不是自签名的,则很可能不会出现此错误,因此另一个可能的修复方法是在LDAP服务器上设置并使用受信任的CA证书


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

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