我是LDAP新手。
我正在使用nodejs的ldapauth,我不断获得32 - No Such Object
。
这是我的代码:
var LdapAuth = require('ldapauth');
var ldapOptions = {
"url":"ldap://my-host:389",
"adminDn" : "cn=manager,dc=guycrc,dc=com",
"adminPassword":"secret",
"searchBase":"ou=Engineering",
"searchFilter":"(uid={{username}})"
};
var ldapAuthClient = new LdapAuth( ldapOptions );
ldapAuthClient.authenticate('Dana', 'Dana',
function(err, result) {
if (err) {
console.log(['Error',err.code, err.dn, err.message ]);
} else {
console.log('Credentials valid = ' + result); // true or false
}
}
);
这是我的LDAP信息 - 我认为与问题相关
dn: cn=Dana,ou=people,dc=guycrc,dc=com
...
cn: Dana Dana
sn: Dana
uid: Dana
userpassword: Dana
ou: Engineering
dn: cn=CompanyA,ou=groups,dc=guycrc,dc=com
...
cn: CompanyA
ou: Groups
member: cn=Dana,ou=people,dc=guycrc,dc=com
为什么我一直都会No Such Object
?
答案 0 :(得分:2)
不确定.authenticate
在你的行中应该做什么:
ldapAuthClient.authenticate('Dana', 'Dana',
我猜想传递的数据不足以根据错误找到所需的对象。
查看您定义的选项:
"searchBase":"ou=Engineering",
"searchFilter":"(uid={{username}})"
意味着它正在查找ou = engineering容器。并寻找一个匹配用户名的uid,所以可能'dana'作为uid部分是正确的。
但是,因为您的LDIF显示带有DN的Dana:
dn: cn=Dana,ou=people,dc=guycrc,dc=com
不在ou = engineering。
也许就像将searchBase更改为ou = people,dc = guycrc,dc = com
一样简单答案 1 :(得分:2)
搜索基础对象ou=engineering
可能不是预期的,该值看起来不像DN,而是像RDN。使用完整且正确的搜索库对象,该对象将是优于客户端搜索对象的DN。