вход для аутентификации ldap работает только при вводе хэшированного пароля

#node.js #login #ldap #ldap-client #ssha

#node.js #аутентификация #ldap #ldap-клиент #ssha

Вопрос:

У меня есть приложение nodejs с интерфейсом angular. Когда я хочу войти в систему с помощью пользователя, это работает только тогда, когда я ввожу хэшированный пароль ssha. Но с помощью обычного текстового пароля я не могу войти в систему.

конфигурация клиента ldap:

 function auth(user, password, successFn){
  var opts ={
    scope: 'sub',
    filter: '(amp;(objectClass=inetOrgPerson)(uid='   user   '))',
  };

  var callback = function (err, res){
    handleResult(collect, err, res);
  };

  var collect = {
    list: [],
    entry: function(entry){ this.list.push(entry); },
    done: function(){
      var correct = this.list.length == 1;
      if ( correct ){
        var pw = this.list[0].userPassword;
        correct = (pw == password);
      }
      if ( correct ){
        var role = this.list[0].employeeType;
        successFn(role[0]);
      }
      else{
        successFn(correct);
      }

    }
  }
  

и

 router.post('/login', function(req, res, next) {
  var user = req.body.username;
  var pw = req.body.password;

  ldap.auth(user, pw, function(role){  
    if ( role ){
      req.session.user = user;
      req.session.userRole = role;
  

Что-то не так с кодом в nodejs или это ошибка конфигурации сервера ldap? И как я могу это исправить?

Ответ №1:

Это выглядит как серьезная проблема безопасности. Ваш код не использует аутентификацию LDAP (т.Е. Запрос привязки LDAP). Он извлекает ввод пользователя и сравнивает поле пароля с вводом пользователем. Но большинство серверов LDAP будут хэшировать пароль пользователя для его защиты. Я бы настоятельно рекомендовал изменить метод аутентификации, чтобы выполнить привязку для проверки пароля, а затем собрать роли.

Комментарии:

1. это всего лишь часть моего кода. У меня есть функция ldpa.bind. Моя проблема в том, что ldap не может войти в систему с помощью простого пароля, указанного во внешнем интерфейсе. Он не может сравнить его с хэшированным паролем ssha у пользователя root.

2. Серверы LDAP выполняют аутентификацию путем сравнения открытого текстового пароля, введенного пользователем, с хэшированной и защищенной версией, которую они хранят в своей базе данных. Если для вашего пользователя это не удается, это означает, что либо имя пользователя неверно (пользователь не найден), либо пароли разные. Хотя вы не можете понять, почему проверка подлинности не выполняется на стороне клиента (по соображениям безопасности), журнал сервера должен дать вам лучшее представление о сбое аутентификации. Обратите внимание, что пользователь root является специальным пользователем и часто находится не в том же месте, что и другие пользователи (это означает, что вы можете не найти его с помощью поиска по поддереву).

3. Бот для входа работает только тогда, когда я ввожу хэшированный пароль, он не работает с обычным текстом. Вы знаете почему?

4. Может быть неправильная конфигурация вашего сервера LDAP или, скорее всего, то, как пароль был добавлен на сервер.

5. это была проблема, о которой я подумал, я настроил сервер ldap в eclipse с помощью плагина сервера apache для eclipse. Знаете ли вы, какую конфигурацию я должен выполнить, чтобы решить мою проблему?