2015-04-16 6 views
1

Я пытаюсь написать прокси-адрес каталога активности, который будет получать поисковые запросы, запускать некоторый код и затем воссоздавать запрос с помощью реального сервера.Прокси Active Directory в node.js

Я не смог заставить его работать, вот это код до сих пор:

var ldap = require('ldapjs'); 
var ActiveDirectory = require('activedirectory'); 
var server = ldap.createServer(); 


server.bind('cn=root', function(req, res, next) { 

    console.log('BIND REACHED'); 
    if (req.dn.toString() !== 'cn=root' || req.credentials !== 'somepassword') 
    return next(new ldap.InvalidCredentialsError()); 

    res.end(); 
    return next(); 
}); 

server.listen(389, '127.0.0.1', function() { 
    console.log('LDAP server listening at %s', server.url); 
}); 

    var ad = new ActiveDirectory({ 
    url: 'ldap://127.0.0.1', 
    baseDN: 'dc=lab,dc=ldapproxy,dc=local', 
    username: 'root', 
    password: 'somepassword' 
}); 
ad.findUser('root', function (err, results) { 
       if (err) { 
        console.log('AD Login Failed: '+err); 
       } 
       else 
        console.log('AD Login Succeeded.'); 
       }); 

ошибка, что им получаю: ProtocolError: InvalidDistinguishedNameError: корень

Кажется, нет как и как я ввел учетные данные ActiveDirectory, я продолжаю получать ту же ошибку. Но когда я запускаю тот же код с разными учетными данными на реальном активном сервере каталогов, он работает без ошибок.

Что мне здесь не хватает? site Я читаю объяснение, как это сделать на Linux и с файлом паролей, я не использую linux или какие-либо файлы, и я не вижу никаких примеров, описывающих, как настроить сервер на привязку и поиск основанный на том, что я написал.

EDIT Я забыл упомянуть, что этот код snappit для отладки, я знаю, что я пытаюсь подключиться к тому же серверу я только что создал, это для целей тестирования и обучения, как Ldap.

ответ

0

Ошибка говорит полностью: корень не является допустимым выдающимся именем, которое вы можете использовать для привязки.

В общем LDAP (OpenLDAP, например) вы можете выполнить операцию привязки только с именем пользователя, которое является полнофункциональным отличительным именем (FQDN) объекта (пользователь в базе данных ldap), с которым вы хотите связать. Это было бы что-то вроде этого:

CN=root,OU=Users,DC=example,DC=local

Это, конечно, зависит от того, где находится учетная запись пользователя в базе данных.

Примечание: В Active Directory операция привязки не ограничивается полным доменным именем пользователя - существует несколько других опций, которые могут использоваться как имя пользователя во время привязки. Я рассмотрел это в предыдущем SO question. Однако я не уверен, поддерживает ли ldapjs эти форматы имени пользователя, учитывая сообщение об ошибке, которое вы видите.

+0

Hi, Итак, основываясь на том, что вы говорите, я должен иметь своего рода пользователя db? Причина, по которой я пытался достичь этой строки 'console.log (' BIND REACHED ');' поэтому я могу сказать, что запросы могут быть получены. libData использует libdjjs и поддерживает эти имена пользователей. Как настроить DC & OU на моем сервере? Это только для целей auth, поэтому я считаю, что для них можно использовать простую строку (OU = Users & DC = example, DC = local), а затем любой запрос, который не соответствует i, может упасть. Но как я могу настроить их на своем сервере? – Shaul

+0

Я устал, поэтому я пропустил эту часть «ошибка говорит все: root ....», я упомянул выше, что попытки привязки к активному серверу каталогов Active Directory с использованием того же кода работали. Разница была только в деталях, поэтому я предполагаю, что мне нужно как-то настроить дерево, прежде чем я смогу получить запросы на связывание. Но на основе учебника единственный способ - через файл ... – Shaul

+0

Я не уверен, что вы просите ... :) Попробуйте распечатать трассировку стека ошибок и убедитесь, что она исходит от вызова либо к новой ActiveDirectory, либо к ad.findUser(). Если у вас есть другие способы изучения вашего Active Directory, попробуйте получить полное доменное имя пользователя * root * и связать его с этой строкой. Он должен работать. –