0

我正在尝试使用 ldapjs 节点库来搜索组内的用户,但这似乎不起作用。这是 ldap 属性:

{
  "dn": "CN=TOM H,OU=GLO_Users,OU=GLOBAL,OU=SITES,OU=Engineering,DC=example,DC=com",
  "controls": [
    
  ],
  "sAMAccountName": "toma",
  "objectClass": [
    "top",
    "person",
    "organizationalPerson",
    "user"
  ],
  "cn": "TOM H",
  "sn": "H",
  "memberOf": [
     "CN=g.some_group,OU=Distribution Groups,OU=Groups,OU=Corp,OU=Common,DC=example,DC=com",
   ]
....
....

我正在尝试搜索 sAMAccountName 为“toma”并且是 memberOf 组“g.some_group”的用户。

为此,我编写了此查询:

const opts = {
   filter: '(&(sAMAccountName=toma)(memberOf=CN=g.some_group))',
   scope: 'sub'
};

const client = ldap.createClient(url: 'some_ldap_server');

client.bind(...);

clinet.search("DC=example,DC=com", opts, (err, res) => {
   res.on('serchEntry', (entry: any) => {
      console.log("entry " + JSON.stringify(entry.object));
  })
  res.on('end', function(result: any) {
      console.log('status: ' + result); 
  });
});

这不会产生任何结果。这只是打印:

status: {"messageID":2,"protocolOp":"LDAPResult","status":0,"matchedDN":"","errorMessage":"","referrals":[],"controls":[]}

我的查询似乎有一些错误:

const opts = {
   filter: '(&(sAMAccountName=toma)(memberOf=CN=g.some_group))',
   scope: 'sub'
};

任何人都可以在这里帮助我。

4

1 回答 1

1

您会在对象的输出中注意到,该memberOf属性包含组的整个专有名称 (DN)。这就是您需要在查询中包含的内容。您只在查询中包含 CN 部分,这就是它不匹配的原因。

const opts = {
   filter: '(&(sAMAccountName=toma)(memberOf=CN=g.some_group,OU=Distribution Groups,OU=Groups,OU=Corp,OU=Common,DC=example,DC=com))',
   scope: 'sub'
};
于 2020-07-30T12:07:33.143 回答