我正在尝试使用NodeJS上的LDAP客户端对用户进行身份验证。客户库是护照。
var express = require('express'),
passport = require('passport'),
bodyParser = require('body-parser'),
LdapStrategy = require('passport-ldapauth');
var app = express();
var LdapStrategy = require('passport-ldapauth').Strategy;
var OPTS = {
server: {
//url: 'ldap://dc02.mydomain.us/DC=mydomain,DC=us',
url: 'ldap://dc02.mydomain.us',
//bindDN: 'ldapadmin@mydomain.us',
bindDN: 'ldapadmin',
bindCredentials: 'mypassword',
searchBase: 'ou=Users,DC=mydomain,DC=us',
searchFilter: '(sAMAccountName={{username}})',
}
};
passport.use(new LdapStrategy(OPTS));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended: false}));
app.use(passport.initialize());
app.post('/login', passport.authenticate('ldapauth', {session: false}), function(req, res, err) {
res.send({status: 'ok'});
});
app.listen(8080);
使用邮递员我正在发布:
localhost:8080/login
Body(JSON): { "username": "myuser","password":"mypassword" }
我得到“ 401未经授权”。
ldapsearch -H ldap://dc02.mydomain.us -x -W -D "ldapadmin@mydomain.us" -b "CN=Users,DC=mydomain,DC=us" "(sAMAccountName=$userid)"
有效。
有想法吗?
// ********************************************* * 工作中 ************************************************** // >
var OPTS = {
server: {
url: 'ldap://dc02.mydomain.us',
bindDN: 'ldapadmin',
bindCredentials: 'mypassword',
searchBase: 'DC=mydomain,DC=us',
searchFilter: '(sAMAccountName={{username}})',
}
};
答案 0 :(得分:0)
searchFilter: '(sAMAccountName={{$username}})'
中有一个错字:$符号不应该在那里,也许它只是您的帖子中的错字,但是如果它也在您的代码中,这也是要解决的第一件事。
searchBase
也可能是一个问题,因为它指向CN=Users,DC=mydomain,DC=us
,并且CN属性用于“叶子对象”(例如用户条目,但不像“组织单位”这样的容器,您可以在其中找到用户),因此类似ou=Users,DC=mydomain,DC=us
这样的事情就可以了,但是如果您不确定DC=mydomain,DC=us
的问题是如果目录不是太大的话。