Javascript 使用node.js和ldapjs时发生LDAP绑定错误
我正试图用下面的node.js文件实现一个基本的ldap绑定。不幸的是,我一直收到代码128的绑定错误。我在网上查了一下,没有发现代码128的引用。我试图搜索的LDAP服务器是一个eDirectory。有没有人有过这样的经历,或者你有过类似的问题?我的节点版本是v0.10.22,我的ldapjs版本是v0.7.1Javascript 使用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
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服务器日志,看看是否有关于错误的更多信息吗?