我正在Node.js应用程序中处理LDAP身份验证/授权流程,需要检索给定用户所属的OU。
以下代码告诉我用户,但是当我检查它时,我没有看到OU:
var express = require('express'),
passport = require('passport'),
bodyParser = require('body-parser'),
LdapStrategy = require('passport-ldapauth');
var opts = {
server: {
url: 'ldap://ldap.forumsys.com:389', // Host + port
bindDn: 'cn=read-only-admin,dc=example,dc=com', // user DN
bindCredentials: 'password', // Password
searchBase: 'dc=example,dc=com', // Base DN
searchFilter: '(uid={{username}})'
}
};
var app = express();
passport.use(new LdapStrategy(opts, function(user, done){
done(null, user);
}));
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) {
var ou = req.user.distinguishedName;
res.send({status: 'Hello ' + req.user.uid});
});
app.listen(8998);
鉴于此代码,检索OU的正确方法是什么?
答案 0 :(得分:1)
问题是LDAP服务器,而不是您的代码。如果针对Active Directory服务器运行,则代码将返回该对象的完整路径。
我测试了你的在线测试服务器和AD服务器。
根据forumsys网站上的评论,似乎要获取OU,您需要查询OU对象本身的成员。我不认为这是大多数LDAP设置的标准。
在此特定LDAP设置中,OU的类型为groupOfUniqueNames。 因此,该组的成员资格由该组成 每个OU中存在的uniqueMember属性。确定一个 用户的OU成员资格,您必须扫描每个OU并查找 uniqueMember属性,包含您正在查找的用户的DN 对
如果您希望自己查看,请使用Apache Directory Studio和上面提供的信息可以查看设置。
答案 1 :(得分:0)
您可以使用member,memberof或distinguishedName搜索条件检索OU,在查询中提供特定用户的DN,以解决此问题。
从你的代码:
用户的DN是:
cn=read-only-admin,dc=example,dc=com
因此,您的搜索过滤器可以是,memeber =用户的DN或distinguishedName =用户的DN:
searchFilter: '(member = {{cn=read-only-admin,dc=example,dc=com}})'
searchFilter: '(distingushedName = {{cn=read-only-admin,dc=example,dc=com}})'
没有LDAP AD来测试代码,但这应该有效。