L'Authentification LDAP avec NodeJS, Express, et le Passeport-ldapauth
I"m de la difficulté de l'authentification auprès d'un Serveur Active Directory avec les outils/applications mentionnées dans le titre.
Je suis à l'aide d'un test à l'ANNONCE de son environnement ici
Voici les extraits de code, si quelqu'un a des suggestions, je voudrais vraiment l'apprécier.
Actuellement, l'erreur que j'obtiens est "invalid username/mot de passe". Je ne suis pas sûr si c'est le bindDn compte/pw ou celui saisi par l'utilisateur dans le formulaire. Selon le passeport-ldapauth projet c'est:
invalidCredentials flash message for InvalidCredentialsError
NoSuchObjectError, and
/no such user/i LDAP errors (default: 'Invalid username/password')
Merci d'avance.
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;
},
...
SERVEUR 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;
SERVEUR 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);
}
));
};
Vous devez vous connecter pour publier un commentaire.
Le problème est avec le
ou=mathematicians
dans la base de recherche. Il y a la mention suivante dans les commentaires sur cette page web:Cela devrait fonctionner (essayé même avec
ldapauth-fork
quipassport-ldapauth
utilise):Votre code est correct, mais l'erreur que vous obtenez m'amène à croire que vous n'avez pas vraiment le bon nom d'utilisateur/mot de passe fourni! Êtes-vous sûr que vous faites des tests avec les informations d'identification correctes?
Au passage, si vous cherchez un moyen plus simple de faire cela pour un gros projet, et ne dérange pas de dépenser un peu d'argent, Stormpath l'API de service fait ce genre de chose pour vous: il veut se synchronise votre AD /LDAP, les utilisateurs dans une API de service, de sorte que vous pouvez travailler avec eux via une API REST (c'est beaucoup plus simple).
Il y a deux bibliothèques que vous pouvez utiliser pour travailler avec elle:
Les deux sont assez simple et agréable à utiliser.
Dont encore de perdre votre chemin, voici mon extrait de code en caractères d'imprimerie.
Côté Serveur
Côté Client