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

Другие вопросы по тегам