如何使用node / passport获取用户的LDAP OU?

时间:2018-01-22 01:35:27

标签: node.js passport.js ldap-query

我正在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的正确方法是什么?

2 个答案:

答案 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来测试代码,但这应该有效。