在 nodejs 中使用 ldapjs 进行 LDAP 身份验证



我是node.js的新手,已经在某种程度上弄清楚了LDAP身份验证。这里我试图从搜索中检索员工 ID,但尽管传递的凭据已成功绑定,但没有获取任何搜索条目,不确定我在哪里被误导了。如果有人能帮助我,那将是一个很大的帮助!

下面是代码片段的结果集:

读取器绑定成功 搜索结果长度:0 搜索 retval:{"messageID":2,"protocolOp":"LDAPResult","status":0,"matchedDN":","errorMessage":","referrals":[],"controls":[]} 没有要绑定的唯一用户

ldapRoute.route('/ldap').post((req, res, next) => {	
	var result = "";
	 
	var email =req.body.email;
	var client = ldap.createClient({
url: 'ldap://******'
	});
	var opts = {
		filter: '(sAMAccountName='+ email + ')',
		attributes: ['sAMAccountName']
		};
		

var username = 'ii' + "\" + email;
	
client.bind(username, req.body.password, function(err) {
if (err){
		result += "Reader bind failed " + err;
res.send(result);
return;
	
	}
	else{

result += "Reader bind succeededn";
	}
	
	client.search('OU=emp,dc=i,dc=ac,dc=com', opts, function(err, searchRes) {
		
	var searchList = []
	if (err) {
result += "Search failed " + err;
res.send(result);
return;
	}
	
searchRes.on("searchEntry", (entry) => {
result += "Found entry: " + entry + "n";
searchList.push(entry);
	
	});
	
searchRes.on("error", (err) => {
result += "Search failed with " + err;
res.send(result);
	
	});
	
searchRes.on("end", (retVal) => {
result += "Search results length: " + searchList.length + "n";
for(var i=0; i<searchList.length; i++)
result += "DN:" + searchList[i].employeeID + "n";
result += "Search retval:" + retVal + "n";
	
if (searchList.length == 1)   {
client.bind(searchList[0].employeeID, req.body.password, function(err) {
if (err)
result += "Bind with real credential error: " + err;
else
result += "Bind with real credential is a success";
		
		   res.send(result);
		});  // client.bind (real credential)
		
		} else { 
result += "No unique user to bind";
res.send(result);
}
});  
		});  
}); 
});

问题出在过滤器中,由于一些奇怪的原因,"结束"在点击"searchEntry"之前被触发,调试它帮助我解决了这个问题。

//Filter
var opts = {
filter: '(sAMAccountName=' + email+')',
scope: 'sub',
attributes: ['employeeID']
}; 
//Search
client.search('OU=empl,dc=ii,dc=ac,dc=in', opts, function(err, searchRes) 
{
if (err) 
{   
result += "Search failed " + err;    
res.send(result); 
return;
}else{
searchRes.on("searchEntry", (entry) => 
{
result += "Found entry: " + entry.object.employeeID;
res.send(result);
}
/ ........../
} });

最新更新