Ros*_*oss 6 javascript ldap node.js
所以我目前正在运行已安装ldapjs的node.js.我的目标是有使用ldapjs允许用户使用用户名和密码登录系统.
我已经阅读了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);
});
Run Code Online (Sandbox Code Playgroud)
这允许我运行以下并成功绑定到服务器.
ldapsearch -H ldap://localhost:1389 -x -D cn=root -w secret -LLL -b "o=myhost" objectclass=*
Run Code Online (Sandbox Code Playgroud)
但我真的不确定从这里去哪里,或者即使这是正确的做法......
理想的设置是拥有一系列用户和密码,并且在成功的ldap连接上确认详细信息是正确的并且回复为true,如果用户名/密码不正确则返回false.
有没有人知道有什么好的资源可以找到更多关于这一点,或者更好,但可以建议一些基本的客户端/服务器端代码,让我知道下一步该去哪里!
任何回复都会非常感激.
非常感谢
Bor*_*ora 21
我从未使用过ldapjs,但基于我在其看似不完整的文档中快速阅读的内容,它可以用于实现LDAP服务器或LDAP客户端,这似乎是您正在尝试做的事情(即,我是假设您要针对现有LDAP服务器对应用程序中的用户进行身份验证).其文档中的大多数示例都侧重于创建一个LDAP服务器,该服务器侦听某个端口并与后端数据库进行交互.如果您不想在后端数据库或用户和密码存储之间放置基于LDAP的接口,那么您可能不需要服务器API.如果您已经运行了LDAP服务器,那么您将需要使用其客户端API执行以下操作:
1.匿名绑定到提供目录服务(包括身份验证服务)的LDAP服务器.看起来你可以这样做:
var ldap = require('ldapjs');
var client = ldap.createClient({
url: 'ldap://my.ldap.server'
});
Run Code Online (Sandbox Code Playgroud)
2.通过用户名(例如,电子邮件地址)搜索相应条目的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);
});
});
Run Code Online (Sandbox Code Playgroud)
3.获取返回条目的DN(entry.object).这个库的文档没有谈论如何使用这些对象(例如,他们的方法,属性等).因此,您必须弄清楚如何实际获取刚刚从目录服务器检索的条目的DN的DN或字符串表示形式.[ 见这个答案下面的评论 ]
4.使用该DN重新绑定到服务器:
client.bind(DN_RETRIEVED, PASSWORD_USER_ENTERED, function(err) {
assert.ifError(err);
});
Run Code Online (Sandbox Code Playgroud)
5.上面绑定的结果是您需要用来确定身份验证是否成功的结果.
如果您尝试在用户/密码数据存储之前实施LDAP服务器以进行基于LDAP的身份验证,则需要遵循其服务器示例.我个人认为这是一种矫枉过正,在安全方面可能会有问题.
| 归档时间: |
|
| 查看次数: |
15024 次 |
| 最近记录: |