用的NodeJS,快速和护照ldapauth LDAP认证

问题描述:

我“米有问题,以验证在标题中提到的工具/应用的Active Directory服务器。用的NodeJS,快速和护照ldapauth LDAP认证

我使用的是测试AD环境中发现here 这里是相关的代码片段,如果有人有任何建议,我会很感激

目前,我得到的错误是“无效的用户名/密码”我不知道这是bindDn帐户/ pw或用户在表单中输入的内容。根据护照 - ldapauth项目,它是:

invalidCredentials flash message for InvalidCredentialsError 
NoSuchObjectError, and 
/no such user/i LDAP errors (default: 'Invalid  username/password') 

在此先感谢。

CLIENT - auth.service.js

... 

login: function(user, callback) { 
var cb = callback || angular.noop; 
var deferred = $q.defer(); 

$http.post('/auth/ldap', { 
    email: user.email, 
    password: user.password 
}). 
success(function(data) { 
    $cookieStore.put('token', data.token); 
    currentUser = User.get(); 
    deferred.resolve(data); 
    return cb(); 
}). 
error(function(err) { 
    this.logout(); 
    deferred.reject(err); 
    return cb(err); 
}.bind(this)); 

return deferred.promise; 
}, 

... 

服务器index.js

'use strict'; 

var express = require('express'); 
var passport = require('passport'); 
var auth = require('../auth.service'); 

var router = express.Router(); 

router.post('/', function(req, res, next) { 
    passport.authenticate('ldapauth', function (err, user, info) { 
    var error = err || info; 
    if (error) return res.json(401, error); 
    if (!user) return res.json(404, {message: 'Something went wrong, please try again.'}); 

    var token = auth.signToken(user._id, user.role); 
    res.json({token: token}); 
    })(req, res, next) 
}); 

module.exports = router; 

服务器passport.js

var passport = require('passport'); 
var LdapStrategy = require('passport-ldapauth').Strategy; 

exports.setup = function (User, config) { 
    passport.use(new LdapStrategy({ 
     usernameField: 'email', 
     passwordField: 'password', 
     server: { 
     url: 'ldap://ldap.forumsys.com:389', 
     bindDn: "cn=read-only-admin,dc=example,dc=com", 
     bindCredentials: "password", 
     searchBase: 'ou=mathematicians,dc=example,dc=com', 
     searchFilter: 'uid={{username}}' 
     } 
    }, 
    function (user, done) { 
     return done(null, user); 
    } 
)); 
}; 

您的代码看起来正确,但是您收到的错误会导致我相信您确实没有提供正确的用户名/密码!你确定你使用正确的凭证进行测试吗?

作为一个旁注 - 如果你正在寻找一个更简单的方法来做这个大项目,并且不介意花一些钱,Stormpath's API service为你做这样的事情:它基本上同步你的AD/LDAP用户加入到它的API服务中,这样你就可以通过REST API使用它们(这简单得多)。

有两个库,你可以用它来工作:

两者都是非常简单/很好用。

问题出在搜索基础的ou=mathematicians。在该网页上的评论中有以下提及:

您看到的问题是由于“uid = riemann”是“ou = mathemeticians”的成员,但不在下面ou。他的那个成员是由“ou = mathemeticians”上的唯一成员属性确定的。

这应该工作(试了一下,即使ldapauth-forkpassport-ldapauth使用):

var opts = { 
    server: { 
    "url": "ldap://ldap.forumsys.com:389", 
    "adminDn": "cn=read-only-admin,dc=example,dc=com", 
    "adminPassword": "password", 
    "searchBase": "dc=example,dc=com", 
    "searchFilter": "(uid={{username}})", 
    } 
};