NodeJS express passport-ldapauth 总是 returns 'Invalid Username/Password'
NodeJS express passport-ldapauth always returns 'Invalid Username/Password'
我在我的 Web 应用程序中使用 passport-ldapauth npm 进行 LDAP/AD 身份验证
但我总是得到 'Invalid Username/Password' 虽然我确信用户名和密码是正确的。
这是我的代码
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...')
});
请大家帮帮我。
问题出在组织单位 (OU)。用户除了我在 bindDN 中没有提到的用户之外还有一个 ou。而且 (sAMAccountName={{username}}) 因为 searchFilter 也很重要,如果我们给 (uid={{username}}) 作为我们传递的用户名,它将不起作用,因为我们传递的是 LDAP AD 中的 sAMAccountName。所以新代码将是。
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}})",
},
};
希望对大家有所帮助。
我在我的 Web 应用程序中使用 passport-ldapauth npm 进行 LDAP/AD 身份验证 但我总是得到 'Invalid Username/Password' 虽然我确信用户名和密码是正确的。 这是我的代码
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...')
});
请大家帮帮我。
问题出在组织单位 (OU)。用户除了我在 bindDN 中没有提到的用户之外还有一个 ou。而且 (sAMAccountName={{username}}) 因为 searchFilter 也很重要,如果我们给 (uid={{username}}) 作为我们传递的用户名,它将不起作用,因为我们传递的是 LDAP AD 中的 sAMAccountName。所以新代码将是。
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}})",
},
};
希望对大家有所帮助。