Аутентификация ldapjs (настройка входа пользователя)
Так что в настоящее время я использую node.js, на котором установлен ldapjs. Моя цель - создать систему, которая использует ldapjs, чтобы пользователи могли войти с именем пользователя и паролем.
Некоторое время я перечитывал документацию http://ldapjs.org/ но изо всех сил пытаюсь понять всю идею реализации ldap и ldapjs.
В настоящее время у меня есть это из документации
var ldap = require('ldapjs');
var server = ldap.createServer();
server.bind('cn=root', function(req, res, next) {
if (req.dn.toString() !== 'cn=root' || req.credentials !== 'secret')
return next(new ldap.InvalidCredentialsError());
res.end();
return next();
});
server.listen(1389, function() {
console.log('LDAP server up at: %s', server.url);
});
Что позволяет мне запустить ниже и успешно привязать к серверу.
ldapsearch -H ldap://localhost:1389 -x -D cn=root -w secret -LLL -b "o=myhost" objectclass=*
Но я действительно не уверен, куда идти дальше, или даже если это правильный подход...
Идеальной настройкой было бы иметь диапазон пользователей и паролей, и при успешном соединении с ldap подтвердить правильность данных и ответить true, или false, если имя пользователя / пароль неверны.
Кто-нибудь знает какие-либо хорошие ресурсы для того, чтобы узнать больше об этом, или, что еще лучше, может предложить какой-нибудь базовый клиент-серверный код, чтобы дать мне представление о том, что делать дальше!
Любые ответы будут очень признательны.
Большое спасибо
1 ответ
Я никогда не использовал ldapjs, но на основании того, что я быстро прочитал в его, казалось бы, неполном документе, его можно использовать для реализации сервера LDAP или клиента LDAP, что, похоже, и есть то, что вы пытаетесь сделать (т.е. я при условии, что вы хотите аутентифицировать пользователей в вашем приложении на существующем сервере LDAP). Большинство примеров в этом документе посвящены созданию сервера LDAP, который прослушивает определенный порт и взаимодействует с внутренней базой данных. Если вы не пытаетесь поместить интерфейс на основе LDAP между вашей серверной базой данных или хранилищем пользователей и паролей, то вам, вероятно, не нужен серверный API. Если у вас уже работает сервер LDAP, вам нужно будет использовать его клиентский API, чтобы сделать что-то вроде этого:
1. Привязать анонимно к серверу LDAP, который предоставляет службы каталогов, включая службы аутентификации. Похоже, вы можете просто сделать это с:
var ldap = require('ldapjs');
var client = ldap.createClient({
url: 'ldap://my.ldap.server'
});
2. Поиск по имени пользователя (например, адрес электронной почты) для DN соответствующей записи
var opts = {
filter: '(mail=USERNAME)',
scope: 'sub'
};
client.search('ou=users,o=acme.com', opts, function(err, res) {
assert.ifError(err);
res.on('searchEntry', function(entry) {
console.log('entry: ' + JSON.stringify(entry.object));
});
res.on('searchReference', function(referral) {
console.log('referral: ' + referral.uris.join());
});
res.on('error', function(err) {
console.error('error: ' + err.message);
});
res.on('end', function(result) {
console.log('status: ' + result.status);
});
});
3. Захватите DN возвращенной записи ( entry.object). Документация этой библиотеки мало говорит о том, как эти объекты могут быть использованы (например, каковы их методы, свойства и т. Д.). Итак, вам нужно выяснить, как на самом деле получить DN или строковое представление DN записи, которую вы только что получили с сервера каталогов. [Смотрите комментарии ниже этого ответа]
4. Перейдите к серверу, используя это DN:
client.bind(DN_RETRIEVED, PASSWORD_USER_ENTERED, function(err) {
assert.ifError(err);
});
5. Результат привязки выше - это то, что вам нужно будет использовать, чтобы определить, была ли аутентификация успешной.
Если вы пытаетесь внедрить сервер LDAP перед вашим хранилищем данных о пользователях и паролях для аутентификации на основе LDAP, вам нужно будет следовать их примерам серверов. Лично я считаю, что это излишне и может быть проблематично с точки зрения безопасности.