如何通过“ dn”的块在节点AD中找到用户?

时间:2019-07-31 10:51:27

标签: node.js active-directory

我想搜索用户并通过他们的专有名称模式来获取他们。我的对象结构是:

{"dn": "CN=Manager,OU=PH,OU=xxx HQ xxx,DC=xxx,DC=xxx",
"userPrincipalName": "user1@domain.com",
"sAMAccountName": "User1",
"whenCreated": "20190517064007.0Z",
"pwdLastSet": "0",
"userAccountControl": "512",
"sn": "User1",
"givenName": "User1",
"cn": "User1",
"displayName": "User nickname",
"groups": []}

我使用了此软件包-https://www.npmjs.com/package/activedirectory#findUsers
函数:findUsers。
预期结果:找到所有拥有

的用户
  

“ CN =经理”

在其“ dn”中。

我已经尝试了其中一些查询:

 dn=*CN=${managerName}*`
{dn:{filter:'*CN=${managerName}*'}}
{filter:'*CN=${managerName}*'}
{filter:{dn: '*CN=${managerName}*'}}

每次ldap返回带有空数组或指示查询错误

1 个答案:

答案 0 :(得分:0)

请注意,dn实际上不是Active Directory中的属性。我认为您是在distinguishedName之后。

但是您不能在任何接受distinguishedName的属性中使用通配符。其中包括distinguishedNamemembermanager和其他几个。

虽然您似乎只想按帐户名进行搜索。您可以按cn属性进行搜索,如下所示:

(&(objectClass=user)(cn=*Manager*))

这将找到名称中带有Manager的任何用户帐户。请注意这一点。如果您在一开始使用通配符,则它不能使用索引进行搜索。因此,在我刚刚给您的查询中,它必须通过每个用户帐户进行搜索以找到匹配项。因此,您可以提供的标准越多越好。

Active Directory还具有一种特殊的搜索,称为Ambiguous Name Resolution,该搜索专门用于查找不知道全名的用户。它会在几个属性中搜索您的搜索字词,例如名字和姓氏,以及其他。例如,您可以像这样进行搜索:

(anr=Michał Bednarz)

即使您帐户上的displayNameBednarz, Michał,它也会找到您。

您还可以在此处阅读有关LDAP查询格式的信息:Active Directory: LDAP Syntax Filters