首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ldapjs认证(用户登录设置)

ldapjs认证(用户登录设置)
EN

Stack Overflow用户
提问于 2012-11-06 16:34:14
回答 1查看 21.6K关注 0票数 9

所以我现在运行的是node.js,它已经安装了ldapjs。我的目标是创建一个使用ldapjs来允许用户使用用户名和密码登录的系统。

我阅读http://ldapjs.org文档已经有一段时间了,但是我很难理解ldap和ldapjs实现它的全部思想。

我现在从文档中得到了这个

代码语言:javascript
复制
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);
});

它允许我运行下面的代码并成功地绑定到服务器。

代码语言:javascript
复制
ldapsearch -H ldap://localhost:1389 -x -D cn=root -w secret -LLL -b "o=myhost" objectclass=*

但我真的不知道该从哪里出发,或者即使这是正确的方法.

理想的设置是拥有一系列的用户和密码,在成功的ldap连接上,确认细节是正确的,如果用户名/pass是不正确的,则用true进行响应。

有没有人知道更多关于这方面的好资源,或者更好的是,可以建议一些基本的客户机/服务器端代码,让我知道下一步该去哪里!

如有任何答复,将不胜感激。

非常感谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-07-02 05:54:30

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

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

代码语言:javascript
复制
var ldap = require('ldapjs');
var client = ldap.createClient({
    url: 'ldap://my.ldap.server'
});

2.使用用户名(例如,电子邮件地址)搜索相应条目的DN

代码语言:javascript
复制
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.获取返回条目( entry.object )的DN。这个库的文档没有谈到如何使用这些对象(例如,它们的方法、属性等等)。因此,您必须弄清楚如何实际获得您刚刚从目录服务器检索到的条目的DN或字符串表示形式。见下面的评论。

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

代码语言:javascript
复制
client.bind(DN_RETRIEVED, PASSWORD_USER_ENTERED, function(err) {
  assert.ifError(err);
});

5.上述绑定的结果是您需要使用什么来确定身份验证是否成功。

如果您试图在基于LDAP的身份验证的用户/密码数据存储前实现LDAP服务器,则需要遵循它们的服务器示例。我个人认为,这是一个过分的做法,在安全方面可能会有问题。

票数 25
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13255389

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档