首页 > 解决方案 > LDAP 获取全名和电子邮件 nodejs

问题描述

我正在用节点 js 编写应用程序。对于登录,我想使用活动目录。我找到了这个。身份验证正常,但我无法获取用户全名和电子邮件。有我的代码:

var ActiveDirectory = require('activedirectory2');
var ActiveDirectory = require('activedirectory2');
var _ = require('underscore');
var query = 'cn=*Exchange*';
var opts = {
    includeMembership : [ 'all' ],
    includeDeleted : false
};
    var config = {
        url: 'ldap://dc.in.domain.cz',
        baseDN: 'CN=Users,DC=in,DC=domain,DC=cz',
        bindDN: 'CN=searchuser,CN=users,DC=in,DC=domain,DC=cz'
    };
    var ad = new ActiveDirectory(config);
    var username = 'username @in.domain.cz';
    var password = 'my_password';

    ad.authenticate(username, password, function (err, auth) {
        if (auth) {
        console.log('Authenticated!');
        ad.find(query, function (err, results) {
                if ((err) || (!results)) {
                    console.log('ERROR: ' + JSON.stringify(err));
                    return;
                }

                console.log('Users');
                _.each(results.users, function (user) {
                    console.log('  ' + user.cn);
                });
            });
        } else {
            console.log('Authentication failed!');
        }
    });

我得到错误:

ERROR: {"lde_message":"000004DC: LdapErr: DSID-0C0907C2, comment: In order to perform this operation a successful bind must be completed on the connection., data 0, v2580\u0000","lde_dn":null}

谢谢

标签: node.jsnpmactive-directory

解决方案


authenticate函数仅用于测试凭据是否有效。例如,如果您有一个登录页面并且您想查看用户提供给您的凭据是否正确,您将使用它。这些凭据不用于其他操作。

在文档中,它在“使用”标题下说:

配置中指定的用户名和密码用于用户和组查找操作。

因此,当您使用 时find(),它会使用您输入的凭据config。你bindDN有,但你没有password,这可能是绑定失败的原因。您需要为该“searchuser”帐户添加密码:

var config = {
    url: 'ldap://dc.in.domain.cz',
    baseDN: 'CN=Users,DC=in,DC=domain,DC=cz',
    bindDN: 'CN=searchuser,CN=users,DC=in,DC=domain,DC=cz',
    password: 'something'
};

请注意,文档说您也可以使用该username属性而不是bindDN,但不要认为除了能够指定用户名而不是整个 DN 之外没有任何功能差异:

var config = {
    url: 'ldap://dc.in.domain.cz',
    baseDN: 'CN=Users,DC=in,DC=domain,DC=cz',
    username: 'searchuser@in.domain.cz',
    password: 'something'
};

推荐阅读