我正在用Node JS编写应用程序。对于登录,我想使用活动目录。我找到了这个package。身份验证可以,但是我无法获得用户全名和电子邮件。有我的代码:
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}
谢谢
最佳答案
authenticate
函数仅用于测试凭据是否有效。例如,如果您有一个登录页面,并且想查看用户提供给您的凭据是否正确,则可以使用此功能。这些凭据不用于其他操作。
在文档中,它在the Usage heading下显示:
配置中指定的用户名和密码是用于用户和组查找操作的用户名和密码。
因此,当您使用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: '[email protected]',
password: 'something'
};