2015-01-26 116 views
6

我「米有問題,以驗證在標題中提到的工具/應用的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); 
    } 
)); 
}; 

回答

2

您的代碼看起來正確,但是您收到的錯誤會導致我相信您確實沒有提供正確的用戶名/密碼!你確定你使用正確的憑證進行測試嗎?

作爲一個旁註 - 如果你正在尋找一個更簡單的方法來做這個大項目,並且不介意花一些錢,Stormpath's API service爲你做這樣的事情:它基本上同步你的AD/LDAP用戶加入到它的API服務中,這樣你就可以通過REST API使用它們(這簡單得多)。

有兩個庫,你可以用它來工作:

兩者都是非常簡單/很好用。

3

問題出在搜索基礎的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}})", 
    } 
};