我的公司有一个ldap服务器,我尝试使用带有ldapjs模块的nodejs来测试ldap连接,我只想在第一时间测试连接,所以没有包含搜索功能。
代码如下:
exports.authenticate = function(req, res){
var ldap = require('ldapjs');
var username = req.body.username;
var password = req.body.password;
var client = ldap.createClient({
url: 'LDAP://192.168.3.220/'
});
client.bind(username, password, function (err) {
if(err){
res.send(err);
}else{
res.send('login');
});
};当我输入正确的用户名和密码时,它会返回"login",这是预期的。当我输入正确的用户名和错误的密码时,它会返回err对象,这也是预期的。
问题是:当我输入有效的用户名或无效的用户名(例如"fjdkfjdklsjfsjd")而没有密码时,它也会返回"login",这是不正常的。
我是ldap和ldapjs的新手,所以这可能只是一个简单的错误,但我无法理解它。请帮帮忙..。
发布于 2014-05-12 20:47:54
对于绑定,您需要传递与LDAP中的条目相关联的dn和密码,而不是直接传递用户名/密码。
因此,进行一个基本的匿名搜索,从结果中获取dn,然后尝试与该dn和用户输入的密码进行绑定。
var ldapres = null
var opts = {
filter: '(username='+ username +')',
scope: 'sub',
}
client.search('ou=people,dc=company,dc=com', opts, function (err, result) {
result.on('searchEntry', function (entry) {
ldapres = entry.raw
})
result.on('end', function (result) {
if (!ldapres) { return res.send('Invalid username') }
client.bind(ldapres.dn, password, function (err) {
if (err) { return res.send('Wrong password') }
res.send('You are logged')
})
})
})我假设您想要在LDAP中指定username属性,但是您可以更改它,就像搜索的ou和dc字段一样。
发布于 2020-06-30 12:40:22
这是在很长一段时间之后,但希望这能帮助一些人。
“这里的问题是:当我输入有效的用户名或无效的用户名(如"fjdkfjdklsjfsjd")而没有密码时,它也会返回”“,这是不正常的。”
不,在LDAP中有一种叫做“匿名”绑定的东西。这使您无需密码即可进行绑定。那为什么呢?原因是要在LDAP中进行搜索,您需要首先进行绑定,因此一些人倾向于匿名绑定,而不是使用专用用户进行搜索操作。因此,仅出于这个原因,应该使用匿名绑定。
重要
因此,当您使用LDAP时,您需要从开发人员端处理空密码和空DN方案,而不是将其传递到LDAP服务器
附言:在某些目录服务中,这可能会被关闭
https://stackoverflow.com/questions/22295809
复制相似问题