当前位置: 首页 > 面试题库 >

节点JS LDAP验证用户

慕鹏
2023-03-14
问题内容

我正在创建一个登录身份验证页面,用户将在其中输入活动目录的用户名和密码,并使用NodeJS进行检查,以查看其是否有效,但是我一直在获取

[Error: LDAP Error Bad search filter]

要么

[Error: Search returned != 1 results]

当我尝试搜索用户名和密码时,我的代码如下:

我正在使用:https :
//github.com/jeremycx/node-LDAP,假设用户输入的用户名是hhill

    var ldap = require('LDAP');
    var ldapServer = new ldap({ uri: 'ldap://batman.lan', version: 3});

    ldapServer.open(function(error) {
        if(error) {
           throw new Error('Cant not connect');
        } else {
            console.log('---- connected to ldap ----');

            username = '(cn='+username+')';
            ldapServer.findandbind({
                base: 'ou=users,ou=compton,dc=batman,dc=lan',
                filter: username,
                password: password
            }, function(error, data) {
                if(error){
                    console.log(error);
                } else {
                    console.log('---- verified user ----');
                }
            });
        }
    });

有人对我做错了什么建议吗?

更新

如果有人需要,这是我想出的解决方案,借助以下答案

    var username = request.param('username');
    var password = request.param('password');

    var ldap = require('ldapjs');
    ldap.Attribute.settings.guid_format = ldap.GUID_FORMAT_B;
    var client = ldap.createClient({
          url: 'ldap://batman.com/cn='+username+', ou=users, ou=compton, dc=batman, dc=com',
          timeout: 5000,
          connectTimeout: 10000
    });
    var opts = {
      filter: '(&(objectclass=user)(samaccountname='+username+'))',
      scope: 'sub',
      attributes: ['objectGUID']
    };

    console.log('--- going to try to connect user ---');

    try {
        client.bind(username, password, function (error) {
            if(error){
                console.log(error.message);
                client.unbind(function(error) {if(error){console.log(error.message);} else{console.log('client disconnected');}});
            } else {
                console.log('connected');
                client.search('ou=users, ou=compton, dc=batman, dc=com', opts, function(error, search) {
                    console.log('Searching.....');

                    search.on('searchEntry', function(entry) {
                        if(entry.object){
                            console.log('entry: %j ' + JSON.stringify(entry.object));
                        }
                    });

                    search.on('error', function(error) {
                        console.error('error: ' + error.message);
                    });

                    client.unbind(function(error) {if(error){console.log(error.message);} else{console.log('client disconnected');}});
                });
            }
        });
    } catch(error){
        console.log(error);
        client.unbind(function(error) {if(error){console.log(error.message);} else{console.log('client disconnected');}});
    }

问题答案:

在这种情况下,您需要的ldapClient不是ldapServer,而是官方文档中的示例代码:

var ldap = require('ldapjs');

ldap.Attribute.settings.guid_format = ldap.GUID_FORMAT_B;

var client = ldap.createClient({
  url: 'ldap://127.0.0.1/CN=test,OU=Development,DC=Home'
});

var opts = {
  filter: '(objectclass=user)',
  scope: 'sub',
  attributes: ['objectGUID']
};

client.bind('username', 'password', function (err) {
  client.search('CN=test,OU=Development,DC=Home', opts, function (err, search) {
    search.on('searchEntry', function (entry) {
      var user = entry.object;
      console.log(user.objectGUID);
    });
  });
});


 类似资料:
  • SCS English Version 子链是MOAC区块链中非常重要的一个模块。其主要目的在于分流母链中的业务逻辑,把一些比较繁琐的业务操作放在子链中执行。 子链由合约节点(Smart Contract Server - SCS)节点组成,必须部署在母链Vnode上。 子链支持分片,每个分片都能独立完成业务逻辑。 子链中的节点随机组合,支持动态增减。 同时,在主链上,我们增加了代理的Vnode节

  • 问题内容: 我正在尝试使用password-jwt设置JWT身份验证。我认为我已经采取了正确的步骤,但是测试GET不会成功,并且我不知道如何调试它。 这是我所做的: 尽可能直接从文档中设置passport-jwt 向我的用户/ login端点添加了令牌结果 到现在为止一切都很好。我可以登录用户(使用护照本地身份验证),响应是我希望的… {“ user”:{“ _id”:“ 56c8b5bd80d1

  • 我在服务器端有几个问题。 我有50多个API。 需要检查每一个API(GET, POST)方法下面的东西。 验证输入是否为有效的json 例如1: 在上面的输入中,我需要检查几个关键字是手动的。例如:名称、代码 例2: 在上面的例子中,我需要检查州和城市 我检查了包裹,但没有找到适合我的。 是否有用于检查json验证的包?

  • 我正在尝试使用Node验证Patreon的webhook签名。js。这是我的代码: Patreon webhooks使用MD5-请参阅https://docs.patreon.com/#webhooks. 我已经多次验证了密钥,所以我知道这不是问题。 “request.header(“x-patreon-signature”)”和“hash”都返回了正确的格式(即它们都是32位字母数字的组合),但

  • 问题内容: 当我使用 docker-machine* 创建节点时 * 它是通过为docker deamon启用tls验证而创建的,这使得事情变得比一般swarm更麻烦。 我想使用不带tls验证的 docker-machine 创建一个节点,以进行测试。 我尝试了: 和 和 问题答案: 尝试: 并在运行后: 跑:

  • 位于/var/lib/jenkins-slave/.ssh的authorized_keys文件具有正确的主公钥。 位于/var/lib/jenkins/.ssh的authorized_keys文件具有正确的master公钥。 master的私钥和公钥文件位于/var/lib/jenkins/.ssh文件夹和~/.ssh文件夹。 我也尝试了“ssh-i.ssh/id_rsa-l jenkins”,但