使用ldapjs创建与OpenLDAP服务器的LDAP连接的最佳方法是什么?

问题描述

尝试建立与OpenLDAP服务器的客户端连接时出现错误错误消息没有帮助。我在OpenLDAP设置或配置中缺少什么吗?

function createLDAPClient () {
return new Promise(function (resolve,reject) {
    if(client.connected) return resolve();

    client = ldap.createClient({
        url: 'ldap://localhost:389',strictDN: false,timeout: 10000,connectTimeout: 10000
        //disableQueue: true
    });

    client.on('connect',function () {
        // console.log("LDAP connected");
        resolve();
    });

    client.on('error',function (err) {
        // console.log("ldap client error",err);
        // idle timeout
        if(err.code === 'ECONNRESET') {
            return reject();
        }
        reject();
    });

});

}

遇到错误

   { InvalidDnSyntaxError: invalid DN
   at messageCallback (D:\Sites\Hermes\opt\node_modules\ldapjs\lib\client\client.js:1419:45)
   at Parser.onMessage (D:\Sites\Hermes\opt\node_modules\ldapjs\lib\client\client.js:1089:14)
   at Parser.emit (events.js:198:13)
   at Parser.write (D:\Sites\Hermes\opt\node_modules\ldapjs\lib\messages\parser.js:111:8)
   at Socket.onData (D:\Sites\Hermes\opt\node_modules\ldapjs\lib\client\client.js:1076:22)
   at Socket.emit (events.js:198:13)
   at addChunk (_stream_readable.js:288:12)
   at readableAddChunk (_stream_readable.js:269:11)
   at Socket.Readable.push (_stream_readable.js:224:10)
   at TCP.onStreamRead [as onread] (internal/stream_base_commons.js:94:17) lde_message: 'invalid DN',lde_dn: null 

}

解决方法

这个问题使我难以理解,因为我看不到错误发生在哪里。答案是解决此处所示的绑定函数中的用户名:

function bind (user) {
return new Promise(function (resolve,reject) {
    return createLDAPClient()
        .then(function () {
            //console.log("client should be bound",!client.unbound);
            // client.bind(user.username,user.password,function (err) {
            // console.log("attempting bind",user);
            var ldapuser = user.username;
            if( config.ldap.type == 'OpenLDAP'){
                ldapuser = 'cn=' + user.username + ',' + config.ldap.dc;
            }
            client.bind(ldapuser,function (err) {
                //console.log("user bind callback,err:",!!err);
                if(err) {
                    // console.log("error type",typeof err,Object.keys(err),err.stack);
                    console.error(err);
                    // bad password
                    if(err.stack.indexOf("InvalidCredentialsError") !== -1) {
                        console.log("bad password",user);
                        reject({
                            msg: 'Invalid credentials - 101'
                        });
                    }
                    reject({
                        msg: 'Error connecting to LDAP server',error: err
                    });
                }
                resolve();
            });
        });
});

}

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...