ldap 身份验证未经授权

ldap authentication unauthorized

我正在尝试使用 NodeJS 上的 LDAP 客户端对用户进行身份验证。客户端库是 passport.

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}})',
    }
};

searchFilter: '(sAMAccountName={{$username}})' 中有一个拼写错误:$ 符号不应该在那里,也许这只是您 post 中的一个拼写错误,但如果它也在您的代码中,那么首先要使固定。

searchBase 也可能是一个问题,因为它指向 CN=Users,DC=mydomain,DC=us 并且 CN 属性用于 'leaf objects'(例如用户条目,但不是像'organizational unit',您可能会在其中找到用户),所以 ou=Users,DC=mydomain,DC=us 之类的东西是可以的,但是如果您不确定 DC=mydomain,DC=us 是否可以,如果您的目录不是太大。