javascript - ldapjs 身份验证(用户登录设置)

标签 javascript node.js ldap

所以我目前正在运行安装了 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);
});

这允许我运行下面的命令并成功绑定(bind)到服务器。

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

但我真的不确定从这里到哪里去,或者即使这是正确的方法......

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

有没有人知道任何好的资源可以找到更多相关信息,或者更好的是可以建议一些基本的客户端/服务器端代码,让我知道下一步该去哪里!

如有任何回复,我们将不胜感激。

非常感谢

最佳答案

我从未使用过 ldapjs,但根据我刚刚在其看似不完整的文档中快速阅读的内容,它可用于实现 LDAP 服务器或 LDAP 客户端,这似乎是您正在尝试做的(即,我假设您想根据现有的 LDAP 服务器对应用程序中的用户进行身份验证)。其文档中的大多数示例都侧重于创建一个监听特定端口并与后端数据库交互的 LDAP 服务器。如果您不想在后端数据库或用户和密码存储之间放置一个基于 LDAP 的接口(interface),那么您可能不需要服务器 API。如果您已经有一个 LDAP 服务器在运行,那么您将需要使用它的客户端 API 来执行如下操作:

1.匿名绑定(bind)到提供目录服务(包括身份验证服务)的 LDAP 服务器。看起来你可以这样做:

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

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

3.获取返回条目的 DN ( entry.object )。这个库的文档并没有过多地谈论如何使用这些对象(例如,它们的方法、属性等是什么)。因此,您必须弄清楚如何实际获取刚刚从目录服务器检索到的条目的 DN 或 DN 的字符串表示形式。 [查看此答案下方的评论]

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

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

5.以上绑定(bind)的结果是您需要用来判断身份验证是否成功的结果。

如果您尝试在用户/密码数据存储前实现 LDAP 服务器以进行基于 LDAP 的身份验证,那么您将需要遵循他们的服务器示例。我个人认为这是一种矫枉过正,并且在安全方面可能存在问题。

关于javascript - ldapjs 身份验证(用户登录设置),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13255389/

相关文章:

javascript - 在 Node.js 项目中连接多个 Mongo DB

node.js - 如何将数据插入到相关的 Mongoose 模式中?

node.js - 使用 MarkLogic Node API,我可以通过 LDAP 进行身份验证吗?

javascript - 从 js 读取/写入 json 到服务器上的文件(不是服务器应用程序)

javascript - 检测使用 href 和 onclick ="setLocation()"单击的特定链接

javascript - Protractor 中 'it' block 内的同步

javascript - 如何在tinymce文本区域中输入字符时将字符附加到文本框,直到按ENTER键?

node.js - 导入 Node 模块会产生错误

node.js - nodejs passport ldapauth "Cannot read ' on' property of undefined"

java - 通过 Spring LDAP 更改 Active Directory 密码