Ошибка привязки 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-запросов, которые иногда указывают на медленный сервер или тот, к которому вы не можете маршрутизировать.