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

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

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

function auth(user, password, successFn){
  var opts ={
    scope: 'sub',
    filter: '(&(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 хешируют пароль пользователя для его защиты. Я настоятельно рекомендую изменить метод auth для выполнения привязки, чтобы подтвердить пароль и затем собрать роли.

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