2015-01-26 19 views
6

I "m gặp khó khăn chứng thực cho một Directory Server tích cực với các công cụ/ứng dụng được đề cập trong tiêu đề.LDAP Authentication với NodeJS, Express, và Hộ chiếu-ldapauth

Tôi đang sử dụng một môi trường thử nghiệm AD tìm thấy here Dưới đây là các đoạn mã có liên quan, nếu bất kỳ ai có bất kỳ đề xuất nào tôi thực sự sẽ đánh giá cao.

Hiện tại, lỗi tôi nhận được là "tên người dùng/mật khẩu không hợp lệ". Tôi không chắc chắn đây có phải là tài khoản bindDn/pw hoặc người dùng nhập vào biểu mẫu. Theo dự án hộ chiếu-ldapauth là:

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

Xin cảm ơn trước.

KHÁCH HÀNG - 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; 
}, 

... 

MÁY CHỦ 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; 

MÁY CHỦ 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); 
    } 
)); 
}; 

Trả lời

2

Mã của bạn có vẻ chính xác, nhưng lỗi bạn đang nhận được dẫn tôi tin rằng bạn thực sự không có tên người dùng/mật khẩu chính xác được cung cấp! Bạn có chắc là bạn đang thử nghiệm với thông tin đăng nhập phù hợp không?

Là một sidenote - nếu bạn đang tìm kiếm một cách đơn giản hơn để làm điều này cho một dự án lớn, và không ngại chi tiêu một số tiền, Stormpath's API service thực hiện loại điều này cho bạn: về cơ bản đồng bộ hóa AD của bạn/Người dùng LDAP vào dịch vụ API của nó để bạn có thể làm việc với họ thông qua API REST (đơn giản hơn nhiều).

Có hai thư viện bạn có thể sử dụng để làm việc với nó:

Cả hai đều khá đơn giản/tốt đẹp để sử dụng.

3

Sự cố xảy ra với ou=mathematicians trong cơ sở tìm kiếm. Có những đề cập sau đây trong các nhận xét trên trang web đó:

Vấn đề bạn thấy là do “uid = riemann” là thành viên của “ou = mathemeticians”, nhưng không cư trú dưới đó. Thành viên của anh ta trong ou đó được thiết lập bởi một thuộc tính uniqueMember trên “ou = mathemeticians”.

này nên hoạt động (thử nó ngay cả với ldapauth-forkpassport-ldapauth sử dụng):

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}})", 
    } 
}; 
Các vấn đề liên quan