Active Directory / Ldap获取NodeJS中特定属性的数据类型或语法

时间:2019-02-11 06:15:22

标签: node.js active-directory ldapjs

我能够查询active-directory / ldap以获得用户信息以及自定义属性。但是,我想知道返回的每个这些属性的基础DataType / attributeSyntax。 另一个问题是,查询如果不包含任何值,则不会返回属性本身。 因此,如果可以获取属性及其各自的DataType,则可以在准备最终输出对象时灵活地设置基于DataType的默认值。

例如: 1.我查询AD以找到具有属性foogivenNamemailmyCustom1

myCustom2用户
{
    givenName : "foo foo",
    mail : "foo@boo.com",
    myCustom1 : "TRUE"
}

但可能不包含myCustom2,因为它没有保存AD中的值。

  1. 获取属性givenNamemailmyCustom1myCustom2的语法
{
    givenName : unistring,
    mail : unistring,
    myCustom1 : boolean,
    myCustom2 : integer,
}
  1. 使用上面的代码,我可以映射第一个结果并将最终对象准备为
{
    givenName : "foo foo"
    mail : "foo@boo.com"
    myCustom1 : "TRUE"
    myCustom2  : //usingHelperFunctionGetDefaultValueFor -> myCustom2
}

1 个答案:

答案 0 :(得分:0)

Active Director不会返回没有值的属性,因此不仅仅是LDAPjs库,这也是AD的工作方式。

每个对象都有一个名为allowedAttributes的属性,它将向您显示该对象可能具有的每个有效属性。

如果需要,allowedAttributesEffective将列出当前用户有权修改的每个属性。

这两个都是构造的属性,这意味着您必须专门要求它们,否则将无法获得它们。例如,在搜索时,您可以选择指定要获取的属性。如果不指定任何内容,则将获得每个具有值的 non-constructed 属性。如果需要任何构造的属性,则必须将其专门添加到该列表中。

那只是属性列表。它不会告诉您类型。您必须为此寻找模式,这比较困难。您必须使用coalesce(sum(case when competitor = "John Smith" then result end), "-") as result 的基本DN进行搜索,其中“ domain.com”是林的 root 域,该域可能与您所选择的域相同或不同。正在搜寻。您可以查看任何对象的CN=Schema,CN=Configuration,DC=domain,DC=com属性,以找到模式的位置,尽管它通常是subSchemaSubEntry(请注意添加的CN=Aggregate,CN=Schema,CN=Configuration,DC=domain,DC=com)。

但是无论如何,那里的每个对象都会有一个名为CN=Aggregate的属性,它是出现在对象上的属性的名称。

因此,如果要查找有关ldapDisplayName属性的详细信息,则可以在模式中搜索givenName。然后(ldapDisplayName=givenName)属性是一个枚举,它将告诉您类型。枚举值显示为here。对于oMSyntax,应为givenName,它是Unicode字符串。

查找此类类型的唯一好处是,如果您希望代码可以在任何AD环境中运行。如果您的代码只能在一种环境中运行,那么只需对所需的属性及其类型进行硬编码,就可以节省编码时间和运行时间。