首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ldapjs身份验证错误

ldapjs身份验证错误
EN

Stack Overflow用户
提问于 2014-03-10 17:00:48
回答 2查看 4.2K关注 0票数 0

我的公司有一个ldap服务器,我尝试使用带有ldapjs模块的nodejs来测试ldap连接,我只想在第一时间测试连接,所以没有包含搜索功能。

代码如下:

代码语言:javascript
复制
exports.authenticate = function(req, res){
  var ldap = require('ldapjs');
  var username = req.body.username;
  var password = req.body.password;

  var client = ldap.createClient({
    url: 'LDAP://192.168.3.220/'
  });

  client.bind(username, password, function (err) {
    if(err){
      res.send(err);
    }else{
      res.send('login');        
  });
};

当我输入正确的用户名和密码时,它会返回"login",这是预期的。当我输入正确的用户名和错误的密码时,它会返回err对象,这也是预期的。

问题是:当我输入有效的用户名或无效的用户名(例如"fjdkfjdklsjfsjd")而没有密码时,它也会返回"login",这是不正常的。

我是ldap和ldapjs的新手,所以这可能只是一个简单的错误,但我无法理解它。请帮帮忙..。

EN

回答 2

Stack Overflow用户

发布于 2014-05-12 20:47:54

对于绑定,您需要传递与LDAP中的条目相关联的dn和密码,而不是直接传递用户名/密码。

因此,进行一个基本的匿名搜索,从结果中获取dn,然后尝试与该dn和用户输入的密码进行绑定。

代码语言:javascript
复制
var ldapres = null

var opts = {
  filter: '(username='+ username +')',
  scope: 'sub',
}

client.search('ou=people,dc=company,dc=com', opts, function (err, result) {

  result.on('searchEntry', function (entry) {
    ldapres = entry.raw
  })

  result.on('end', function (result) {
    if (!ldapres) { return res.send('Invalid username') }

    client.bind(ldapres.dn, password, function (err) {
      if (err) { return res.send('Wrong password') }
      res.send('You are logged')
    })

  })
})

我假设您想要在LDAP中指定username属性,但是您可以更改它,就像搜索的oudc字段一样。

票数 3
EN

Stack Overflow用户

发布于 2020-06-30 12:40:22

这是在很长一段时间之后,但希望这能帮助一些人。

“这里的问题是:当我输入有效的用户名或无效的用户名(如"fjdkfjdklsjfsjd")而没有密码时,它也会返回”“,这是不正常的。”

不,在LDAP中有一种叫做“匿名”绑定的东西。这使您无需密码即可进行绑定。那为什么呢?原因是要在LDAP中进行搜索,您需要首先进行绑定,因此一些人倾向于匿名绑定,而不是使用专用用户进行搜索操作。因此,仅出于这个原因,应该使用匿名绑定。

重要

因此,当您使用LDAP时,您需要从开发人员端处理空密码和空DN方案,而不是将其传递到LDAP服务器

附言:在某些目录服务中,这可能会被关闭

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

https://stackoverflow.com/questions/22295809

复制
相关文章

相似问题

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