gpt4 book ai didi

angularjs - 使用 NodeJS、Express 和 Passport-ldapauth 进行 LDAP 身份验证

转载 作者:搜寻专家 更新时间:2023-10-31 22:19:41 25 4
gpt4 key购买 nike

我在使用标题中提到的工具/应用程序向 Active Directory 服务器进行身份验证时遇到问题。

我正在使用找到的测试 AD 环境 here这是相关的代码片段,如果有人有任何建议,我将不胜感激。

目前,我得到的错误是“无效的用户名/密码”。我不确定这是 bindDn 帐户/密码还是用户在表单中输入的帐户。根据 passport-ldapauth 项目,它是:

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);
}
));
};

最佳答案

问题出在搜索库中的 ou=mathematicians 上。该网页的评论中提到了以下内容:

The issue you are seeing is due to the fact that “uid=riemann” is a member of “ou=mathemeticians”, but does not reside under that ou. His membership in that ou is established by a uniqueMember attribute on “ou=mathemeticians”.

这应该有效(即使使用 passport-ldapauth 使用的 ldapauth-fork 也尝试过):

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}})",
}
};

关于angularjs - 使用 NodeJS、Express 和 Passport-ldapauth 进行 LDAP 身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28159093/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com