Ошибка привязки LDAP с помощью узла.js и ldapjs
Я пытаюсь реализовать базовую привязку ldap со следующим узлом.файл 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 на сервере вместо самозаверяющего сертификата (должен иметь права администратора сервера и платить за действительный cert)
- используйте IP сервера LDAP или IP балансировщика нагрузки вместо dns для параметра url.
поскольку вы используете безопасный протокол (ldaps: / / вместо ldap://), и я предполагаю, что вы пытаетесь подключиться к серверу с самозаверяющим сертификатом, вы получите сбой при использовании узла v0.10.x (и, вероятно, все более поздние версии), а код/модуль, который вы используете, специально не устанавливает процесс.env.NODE_TLS_REJECT_UNAUTHORIZED to ложный.
node_tls_reject_unauthorized был изменен на true по умолчанию по причине. Если вы решите установить node_tls_reject_unauthorized в false, вы открываете больше рисков безопасности и Я бы посоветовал делать это только в частных сетях в лучшем случае, и никогда в производственных средах. Не спускаясь в кроличью нору обсуждения безопасности, всегда лучше использовать сертификат, подписанный CA. Более подробную информацию о различиях в сертификатах можно найти здесь. Этот может также вызвать проблемы, если ваше приложение достаточно надежно, чтобы сделать несколько подключений к различным защищенным серверам, где только некоторые используют самозаверяющие сертификаты, снова упомянутые в этой ссылке.
Если сертификат не был самозаверяющим, вы, скорее всего, не должны получать эту ошибку, поэтому другое потенциальное исправление-настроить и использовать доверенный сертификат CA на сервере LDAP.
С другой стороны, если вы используете обычное незащищенное соединение ldap (не через TLS), и / или вы получаете эту ошибку только иногда, в то время как в других случаях она проходит, вы должны попробовать установить url ldap на IP сервера LDAP или IP балансировщика нагрузки (и использовать порт 3268 для разрешить поиск во всех доменах). В больших сетевых настройках это позволит избежать потенциальных циклических dns-запросов, которые иногда указывают на медленный сервер или тот, к которому вы не можете маршрутизировать.