gpt4 book ai didi

node.js - 使用 passport-ldapauth npm 进行 LDAP 身份验证

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

我正在尝试使用 passport-ldapauth npm 验证 openLDAP 用户名和密码。在执行下面的代码时,我总是得到错误{ message: 'Missing credentials' }.请帮我看看我的代码有什么问题。

var connect = require('connect'),
app = connect(),
passport = require('passport'),
LdapStrategy = require('passport-ldapauth');

// Credentials from the free LDAP test server by forumsys
// More info at: http://www.forumsys.com/tutorials/integration-how-to/ldap/online-ldap-test-server/
var OPTS = {
server: {
url: 'ldap://<ip>',
bindDn: '<admin username>',
bindCredentials: '<admin password>',
usernameField: "<passing actual username>",
passwordField: "<password>"
}
};

passport.use(new LdapStrategy(OPTS));

app.use(passport.initialize());


app.use(connectRoute(function (router) {
router.post('/login', function (req, res, next) {
passport.authenticate('ldapauth', {session: false}, function (err, user, info) {
console.log(info);
if (err) {
return next(err); // will generate a 500 error
}
// Generate a JSON response reflecting authentication status
if (!user) {
return res.send({success: false, message: 'authentication failed'});
}
return res.send({success: true, message: 'authentication succeeded'});
})(req, res, next);
});
}))

app.listen(8080);

更多详情请看这个badRequestMessage flash message for missing username/password (default: 'Missing credentials')

最佳答案

这是我的配置:

var passport = require('passport');
var LdapStrategy = require('passport-ldapauth').Strategy;

var OPTS = {
server: {
url: '<ldap server>',
bindDn: '<admin username>',
bindCredentials: '<admin password>',
searchBase: '<base dn>',
searchFilter: '(sAMAccountName={{username}})'
}
};

passport.use(new LdapStrategy(OPTS));

app.use(passport.initialize());
app.use(passport.session());

passport.serializeUser(function(user, done) {
done(null, user);
});

passport.deserializeUser(function(user, done) {
done(null, user);
});

usernameFieldpasswordFieldOPTS是可选的。我的程序使用默认值 usernamepassword .如果usernameField已设置,需要修改searchFilter作为(sAMAccountName={{<usernameField value>}})(uid={{<usernameField value>}}) .

此外,为了在您的 session 中存储登录状态,express-session模块是必需的。 session 配置如下:

var session = require('express-session');
app.use(session({
secret: 'ldap secret',
resave: false,
saveUninitialized: true,
cookie : { httpOnly: true, maxAge: 2419200000 } /// maxAge in milliseconds
}));

然后,您可以将 LDAP 身份验证用作:

app.post('/login', passport.authenticate('ldapauth', {
successRedirect: '/users/profile', failureRedirect: '/login'
}));

关于node.js - 使用 passport-ldapauth npm 进行 LDAP 身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30707181/

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