ldapjsauthentication(用户login设置)

所以我目前正在运行node.js,它已经安装了ldapjs。 我的目标是build立一个使用ldapjs来允许用户使用用户名和密码login的系统。

我一直在阅读http://ldapjs.org文档一段时间,但我正在努力理解ldap和ldapjs实现它的整个想法。

我目前从文档中有这个

var ldap = require('ldapjs'); var server = ldap.createServer(); server.bind('cn=root', function(req, res, next) { if (req.dn.toString() !== 'cn=root' || req.credentials !== 'secret') return next(new ldap.InvalidCredentialsError()); res.end(); return next(); }); server.listen(1389, function() { console.log('LDAP server up at: %s', server.url); }); 

这允许我运行下面的并成功绑定到服务器。

 ldapsearch -H ldap://localhost:1389 -x -D cn=root -w secret -LLL -b "o=myhost" objectclass=* 

但是我真的不确定该从哪里走,或者即使这是正确的方法…

理想的设置是拥有一系列用户和密码,并且在成功的LDAP连接上确认详细信息是正确的,并且如果用户名/密码不正确,则返回true或false。

有没有人知道任何更好的资源,或者更好的build议一些基本的客户端/服务器端代码,让我知道下一步该怎么去!

任何答复将非常感激。

非常感谢

我从来没有使用过ldapjs,但基于我刚刚看到的看似不完整的文档,它可以用来实现一个LDAP服务器或LDAP客户端,这似乎是你想要做的(即,我假设您想要针对现有的LDAP服务器在应用程序中对用户进行身份validation)。 其文档中的大多数示例着重于创build一个在特定端口上侦听并与后端数据库交互的LDAP服务器。 如果您不想在后端数据库或用户和密码库之间放置基于LDAP的界面,则可能不需要服务器API。 如果您已经有一个LDAP服务器在运行,那么您将需要使用其客户端API来执行如下操作:

1.匿名绑定到提供包括authentication服务的目录服务的LDAP服务器。 看起来你可以这样做:

 var ldap = require('ldapjs'); var client = ldap.createClient({ url: 'ldap://my.ldap.server' }); 

2.通过用户名(例如电子邮件地址)search相应条目的DN

 var opts = { filter: '(mail=USERNAME)', scope: 'sub' }; client.search('ou=users,o=acme.com', opts, function(err, res) { assert.ifError(err); res.on('searchEntry', function(entry) { console.log('entry: ' + JSON.stringify(entry.object)); }); res.on('searchReference', function(referral) { console.log('referral: ' + referral.uris.join()); }); res.on('error', function(err) { console.error('error: ' + err.message); }); res.on('end', function(result) { console.log('status: ' + result.status); }); }); 

抓取返回条目的DN(entry.object)。 这个库的文档没有谈论如何使用这些对象(例如,他们的方法,属性等)。 所以,你将不得不弄清楚如何实际获得从目录服务器中检索到的条目的DN的DN或string表示。

4.使用该DN重新绑定到服务器:

 client.bind(DN_RETRIEVED, PASSWORD_USER_ENTERED, function(err) { assert.ifError(err); }); 

5.上面的绑定的结果是您将需要用来确定身份validation是否成功。

如果您尝试在用户/密码数据存储前面实施LDAP服务器以进行基于LDAP的身份validation,则需要遵循其服务器示例。 我个人认为这是一个矫枉过正的问题,在安全性方面可能会有问题。