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
是否可以,如果您的目录不是太大。
我正在尝试使用 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
是否可以,如果您的目录不是太大。