为什么我无法访问LDAP的所有属性?

时间:2017-09-06 13:58:39

标签: javascript node.js ldap

我正在使用Node.js 6.11.0和MongoDB开发一个JavaScript Web服务。我的Web服务需要执行LDAP查询。

我正在使用ldapjs包(版本1.0.1)。在我的LDAP模块JavaScript文件下面:

var ldap = require("ldapjs");

function bind(username, password, callback) {
    try {
        let client = _getClient(global.config.ldap.host);
        client.bind(username, password, function (err) {
            callback(err, client);
        });
    } catch (err) {
        callback(err);
    }
}

function search(client, dn, opts, callback) {

    let arr = [];
    if (!opts) opts = {};

    client.search(dn, opts, function (err, res) {
        if (err) {
            callback(err);
            return;
        }

        res.on('searchEntry', function (entry) {
            arr.push(entry);
        });
        res.on('error', function (err) {
            callback(err);
        });
        res.on('end', function (result) {
            global.logger.log('status: ' + result.status);
            callback(undefined, arr);
        });
    });
}

function _getClient(host) {
    return ldap.createClient({
        url: host
    });
}

exports.bind = bind;
exports.search = search;

我正在查询此代码:

let appUser = "utente";
let appPass = "password";

let userDn = global.config.userDn.replace("{uid}", appUser);

ldapUtils.bind(userDn, appPass, function (err, client) {
    if (err) {
        return;
    }

    global.logger.info("Bind success...");

    var opts = {
        scope: "sub"
    };

    ldapUtils.search(client, global.config.shopsDn, opts, function (err, data) {
        if (err) {
            global.logger.error(err);
            return;
        }

        global.logger.info("Search success...");
        data[3].attributes[0]._vals[0...n]; // Here I cannot view all attributes.

        res.send();
    });
});

我无法使用相同的身份验证参数查看我可以使用 Apache Directory Studio 查看的所有属性。

Apache Directory Studio...

你能帮助我吗?

修改

我指定了属性,但问题仍然存在:

 var opts = {
        scope: "sub",
        attributes: ["dn", "cn", "customAttribute"]
 };

由于

2 个答案:

答案 0 :(得分:0)

虽然如果没有指定属性,它应该返回所有属性,但尝试向搜索选项添加属性,例如:

var opts = {
    scope: "sub"
    attributes: ["dn", "cn", "description", "objectGUID"]
};

答案 1 :(得分:0)

您应该允许在https://docs.microsoft.com/en-us/dotnet/api/microsoft.azure.devices.messagesystempropertynames?view=azure-dotnet

上使用
     var opts = {
        paged: true,
        attributes = {
           user: [
             'dn', 'distinguishedName',
             'userPrincipalName', 'sAMAccountName', /* 'objectSID', */ 'mail',
             'lockoutTime', 'whenCreated', 'pwdLastSet', 
             'userAccountControl',
             'employeeID', 'sn', 'givenName', 'initials', 'cn', 'displayName',
             'comment', 'description'
             ],
           group: [
             'dn', 'cn', 'description', 'distinguishedName', 
            'objectCategory'
           ]}
       };