Аутентификация LDAP с использованием ldap js в nodejs - PullRequest
0 голосов
/ 28 мая 2020

Я новичок от ie до node.js, немного разобрался с аутентификацией LDAP. Здесь я пытаюсь получить идентификатор сотрудника из поиска, но ни одна из записей поиска не извлекается, хотя переданные учетные данные успешно ограничены, не уверен, где меня вводят в заблуждение. Если бы кто-то мог мне помочь, это было бы большим подспорьем!

Ниже приведены наборы результатов фрагмента кода:

Привязка читателя выполнена успешно Длина результатов поиска: 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 succeeded\n";
	}
	
	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);
                    }

         });  

		});  

 }); 

});

1 Ответ

0 голосов
/ 01 июня 2020

Проблема заключалась в фильтрах, и по каким-то странным причинам 'end' запускался до нажатия '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);
 }
 / ........../
} });
...