微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何获取我使用 ldapjs 绑定的用户的个人资料

如何解决如何获取我使用 ldapjs 绑定的用户的个人资料

我正在使用 ldapjs 包。我正在使用此代码,它允许我 使用 readonly 凭据绑定到 LDAP 服务器并从 ou=people提取用户配置文件之一。

'use strict';

// figure 1

const ldap = require('ldapjs');

const ldapClient = ldap.createClient({
  url: 'ldap://127.0.0.1:389'
});

const username = 'cn=readonly,dc=vodolaz095,dc=life';
const password = 'readonly';

ldapClient.bind(
  username,password,function (error) {
    if (error) {
      throw error;
    }
    console.log('bind performed');

    ldapClient.search('ou=people,dc=life',{
      filter: `(uid=vodolaz095)`,scope: 'one',attributes: ['uid','dn','cn','mail']
    },function (error,res) {
      if (error) {
        throw error;
      }
      res.on('searchEntry',function (data) {
        // console.log('Data found',data);
        console.log('Data object',JSON.stringify(data.object,null,2));
      });
      res.once('error',function(error){
        throw error;
      });
      res.once('end',function () {
        console.log('Completed');
        process.exit(0)
      });
    });
  }
);

现在,我将用户名和密码更改为受限用户用户名和密码,我已通过 readonly 凭据提取并执行相同的代码


// same code as in figure 1

const username = 'uid=vodolaz095,ou=people,dc=life';
const password = 'thisIsNotAPassword123';

// same code as in figure 1

我可以绑定到ldap服务器,没问题。但是当我尝试获取自己的个人资料时,它返回给我 NoSuchObjectError: No such Object error

那么,问题是:如何在 openldap获取我绑定的用户的个人资料? 比如,我怎样才能发出 whoami 命令?

解决方法

您可以通过使用您的 bindDN 设置 base 搜索并将范围设置为 base(不带任何过滤器)来获取您绑定的用户的条目。

所以如果 username 是 bindDN,这应该可以工作:

ldapClient.search(username,{
  scope: 'base',attributes: ['uid','dn','cn','mail']
}

UPD:按预期工作的完整代码示例:



'use strict';

const ldap = require('ldapjs');

const ldapClient = ldap.createClient({
  url: 'ldap://127.0.0.1:389'
});


const username = 'uid=vodolaz095,ou=people,dc=vodolaz095,dc=life'
const password = 'thisIsVerySecureSecretPassword';


ldapClient.bind(
  username,password,function (error) {
    if (error) {
      throw error;
    }
    console.log('bind performed');

    ldapClient.search('uid=vodolaz095,dc=life',{ // notice,full id of user profile here
      filter: `(uid=vodolaz095)`,// seems to be ignored,same result,if filter used or not used
      scope: 'base',// important
      attributes: ['uid','mail']
    },function (error,res) {
      if (error) {
        throw error;
      }
      res.on('searchEntry',function (data) {
        // console.log('Data found',data);
        console.log('Data object',JSON.stringify(data.object,null,2));
      });
      res.once('error',function (error){
        throw error;
      });
      res.once('end',function () {
        console.log('All passed');
        process.exit(0);
      });
    });
  }
);



版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?