ldap身份验证未授权

时间:2019-05-17 00:02:47

标签: node.js ldap

我正在尝试使用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}})',
    }
};

1 个答案:

答案 0 :(得分:0)

searchFilter: '(sAMAccountName={{$username}})'中有一个错字:$符号不应该在那里,也许它只是您的帖子中的错字,但是如果它也在您的代码中,这也是要解决的第一件事。

searchBase也可能是一个问题,因为它指向CN=Users,DC=mydomain,DC=us,并且CN属性用于“叶子对象”(例如用户条目,但不像“组织单位”这样的容器,您可以在其中找到用户),因此类似ou=Users,DC=mydomain,DC=us这样的事情就可以了,但是如果您不确定DC=mydomain,DC=us的问题是如果目录不是太大的话。