2015-01-26 6 views
6

मैं "शीर्षक में उल्लिखित टूल/अनुप्रयोगों के साथ एक सक्रिय निर्देशिका सर्वर पर प्रमाणीकरण परेशानी हो रही हूँ।LDAP प्रमाणीकरण

मैं एक परीक्षण ई पर्यावरण पाया here उपयोग कर रहा हूँ यहां प्रासंगिक कोड स्निपेट हैं, अगर किसी के पास कोई सुझाव है तो मैं वास्तव में इसकी सराहना करता हूं।

वर्तमान में, मुझे जो त्रुटि मिल रही है वह "अवैध उपयोगकर्ता नाम/पासवर्ड" है। मुझे यकीन नहीं है कि यह bindDn खाता/पीडब्ल्यू या उपयोगकर्ता फॉर्म में प्रवेश करता है। पासपोर्ट-लडापाथ परियोजना के अनुसार यह है:

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

अग्रिम धन्यवाद।

ग्राहक - 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

आपका कोड सही दिखता है, लेकिन आपको जो त्रुटि मिल रही है, वह मुझे विश्वास दिलाती है कि वास्तव में आपके पास सही उपयोगकर्ता नाम/पासवर्ड नहीं है! क्या आप वाकई सही प्रमाण-पत्रों के साथ परीक्षण कर रहे हैं?

एक sidenote के रूप में - यदि आप एक बड़ी परियोजना के लिए ऐसा करने का एक आसान तरीका ढूंढ रहे हैं, और कुछ पैसे खर्च करने में कोई फर्क नहीं पड़ता, Stormpath's API service आपके लिए इस तरह की चीज करता है: यह मूल रूप से आपके एडी/एलडीएपी उपयोगकर्ताओं को इसकी एपीआई सेवा में ताकि आप एक आरईएसटी एपीआई के माध्यम से उनके साथ काम कर सकें (यह बहुत आसान है)।

दो पुस्तकालयों आप इसके साथ काम करने के लिए उपयोग कर सकते हैं कर रहे हैं:

दोनों बहुत सरल/उपयोग करने के लिए अच्छा कर रहे हैं।

3

समस्या बेस में ou=mathematicians के साथ समस्या है।

मुद्दा आप देख रहे हैं तथ्य यह है कि "= uid Riemann" के "कहां = mathemeticians" एक सदस्य है की वजह से है, लेकिन के तहत रहते हैं नहीं है: वहाँ उस वेब पेज पर टिप्पणी में निम्नलिखित उल्लेख है वह कहां उस कहां में उनकी सदस्यता "ou = गणितज्ञ" पर एक अद्वितीय सदस्य विशेषता द्वारा स्थापित की गई है।

यह काम करना चाहिए (इसे करने की कोशिश भी ldapauth-fork जो passport-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}})", 
    } 
}; 
संबंधित मुद्दे