NodeJS express passport-ldapauth всегда возвращает «Неверное имя пользователя / пароль» - PullRequest
0 голосов
/ 23 октября 2018

Я использую passport-ldapauth npm для аутентификации LDAP / AD в моем веб-приложении, но всегда получаю «Неверное имя пользователя / пароль», хотя я уверен, что имя пользователя и пароль верны.Вот мой код

var express = require('express')
var app =  express();
var bodyParser = require('body-parser');
var passport     = require('passport');
var LdapStrategy = require('passport-ldapauth');
app.use(bodyParser.urlencoded({extended:true}));
app.use(bodyParser.json());
app.use(function(req, res, next) {
   res.header("Access-Control-Allow-Origin", "*");
   res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, 
   Content-Type, Accept");
   next();
});



var OPTS = {
  server: {
    "url": "ldap://ip-address:389",
    "bindDN": "cn=admin-username,dc=dcname,dc=com",
    "bindCredentials": "admin-password",
    "searchBase": "dc=dcname,dc=lan",
    "searchFilter": "(sAMAccountName={username})",//I have tried (uid={{username}}) also.
  },
  passReqToCallback : true
};

passport.use(new LdapStrategy(OPTS));

app.post('/api/login', function(req, res, next) {  
passport.authenticate('ldapauth', {session: true}, function(err, user, info) 
{
  console.log("err: " + err); //returns null
  console.log("user: " + user);//returns false
  console.log("info: " + JSON.stringify(info));//returns {"message":"Invalid username/password"}
    if (err) {
      return next(err); // will generate a 500 error
    }
    // Generate a JSON response reflecting authentication status
    if (! user) {
      return res.send({ success : false, message : 'authentication failed' 
      });
    }
    return res.send({ success : true, message : 'authentication succeeded' 
    });
   })(req, res, next);  
});
app.listen(3000, function() {
  console.log('Listening on port 3000...')
});

Пожалуйста, помогите мне, ребята.

1 Ответ

0 голосов
/ 24 октября 2018

Проблема была с организационной единицей (OU).У пользователя был еще один пользователь кроме пользователей, которых я не упомянул в bindDN.А также (sAMAccountName = {{username}}), так как searchFilter также важен, он не будет работать, если мы передадим (uid = {{username}}) в качестве имени пользователя, которое мы передаем, sAMAccountName в LDAP AD.Таким образом, новый код будет.

var OPTS = {
    server: {
      "url": "ldap://ip-address:389",
      "bindDN": "cn=username,ou=Users,ou=user-other-ou,dc=dcname,dc=com",
      "bindCredentials": "password",
      "searchBase": "dc=dcname,dc=lan",
      "searchFilter": "(sAMAccountName={{username}})",
    },  
};

Надеюсь, он кому-нибудь поможет.

...