Ошибка привязки LDAP с использованием node.js и ldapjs
Я пытаюсь реализовать базовую привязку ldap с помощью следующего файла node.js. К сожалению, я получаю сообщение об ошибке привязки с кодом 128. Я посмотрел онлайн и не нашел ссылок на код 128. Сервер LDAP, который я пытаюсь найти, является eDirectory. У кого-нибудь есть опыт с этим или у вас были похожие проблемы? Моя версия узла v0.10.22 и моя версия ldapjs v0.7.1
var ldap = require('ldapjs');
var creds = {
url: "ldaps://ldap.url.com:636",
bindDN: "cn=ldap,o=com"
};
var opts = {
filter: "(cn=username)",
scope: "sub"
};
function authDN(client, dn, password, cb) {
client.bind(dn, password, function (err) {
client.unbind();
cb(err === null, err);
});
}
function output(res, err) {
if (res) {
console.log('success');
} else {
console.log(['Error',err.code, err.dn, err.message ]);
}
}
var client = ldap.createClient(creds);
authDN(client, '(cn=username)', 'password', output);
3 ответа
Это подтверждает подлинность, когда я добавил следующее в начало моего файла:
process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0";
Я не исследовал достаточно, чтобы понять, почему это работает, но я нашел этот ответ здесь: https://github.com/mikeal/request/issues/418
В общем, при отладке проблемы eDirectory запрашивайте доступ к iMonitor, чтобы вы могли взглянуть на DStrace с опцией +LDAP. Это покажет вам, что сервер LDAP отправляет обратно, упрощая поиск неисправностей.
Чтобы дополнить ответ Кайзера, объяснение того, почему добавление process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0";
Чтобы код работал, можно найти в верхней части этой ссылки: https://github.com/visionmedia/superagent/issues/205.
Потенциальные исправления:
- добавлять
process.env.NODE_TLS_REJECT_UNAUTHORIZED = 0;
в начало вашего скрипта для узла v0.10.x (и выше) - Настройте доверенный сертификат CA на сервере вместо самозаверяющего сертификата (должен иметь права администратора сервера и платить за действительный сертификат)
- В качестве параметра url используйте IP-адрес сервера LDAP или IP-адрес балансировщика нагрузки вместо dns.
Поскольку вы используете защищенный протокол (ldaps:// вместо ldap://), и я предполагаю, что вы пытаетесь подключиться к серверу с самозаверяющим сертификатом, вы получите ошибку при использовании узла v0. 10.x (и, вероятно, все более поздние версии) и используемый вами код / модуль не устанавливает для process.env.NODE_TLS_REJECT_UNAUTHORIZED значение false.
Значение по умолчанию для NODE_TLS_REJECT_UNAUTHORIZED было изменено на true по умолчанию. Если вы решите установить для NODE_TLS_REJECT_UNAUTHORIZED значение false, вы создадите больше рисков для безопасности, и я бы советовал делать это в лучшем случае только в частных сетях, а не в производственных средах. Не углубляясь в кроличью нору о безопасности, всегда лучше использовать сертификат, подписанный ЦС. Более подробную информацию о различиях в сертификатах можно найти здесь. Это также может вызвать проблемы, если ваше приложение достаточно устойчиво для создания нескольких подключений к различным защищенным серверам, где только некоторые используют самозаверяющие сертификаты, снова упомянутые в этой ссылке.
Если сертификат не был самоподписанным, вы, скорее всего, не должны получать эту ошибку, поэтому еще одно потенциальное решение - это настроить и использовать вместо этого доверенный сертификат CA на сервере LDAP.
С другой стороны, если вы используете обычное, незащищенное соединение ldap (не через TLS), и / или вы получаете эту ошибку только изредка, в то время как в других случаях это происходит, вы должны попытаться установить URL-адрес ldap на сервер LDAP IP или IP балансировщика нагрузки (и используйте порт 3268, чтобы разрешить поиск во всех доменах). В более крупных сетевых настройках это позволит избежать потенциальных циклических DNS-запросов, которые иногда указывают на медленный сервер или тот, на который вы не можете перенаправить.