0

我能够查询活动目录/ldap 以获取用户信息以及自定义属性。但是,我想知道返回的每个属性的基础 DataType/attributeSyntax。另一个问题是,如果它不包含任何值,查询将不会返回属性本身。因此,如果可以获取属性及其各自的 DataType,那么它为我提供了在准备最终输出对象时基于 DataType 设置默认值的灵活性。

例如: 1. 我查询 AD 以查找具有, , ,foo属性的用户givenNamemailmyCustom1myCustom2

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

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

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

1 回答 1

1

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

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

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

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

这只是一个属性列表。它不会告诉你类型。您必须为此查看架构,这更加困难。您必须使用 的基本 DN 进行搜索CN=Schema,CN=Configuration,DC=domain,DC=com,其中“domain.com”是您的林的域,它可能与您正在搜索的域相同,也可能不同。您可以查看subSchemaSubEntry任何对象的属性以找到模式的位置,尽管它通常是CN=Aggregate,CN=Schema,CN=Configuration,DC=domain,DC=com(注意添加的CN=Aggregate)。

但无论如何,其中的每个对象都会有一个名为 的ldapDisplayName属性,它是出现在对象上的属性的名称。

因此,如果您想查找该givenName属性的详细信息,您可以在架构中搜索(ldapDisplayName=givenName). 然后oMSyntax属性是一个枚举,它会告诉你类型。枚举值显示在这里。对于givenName,那将是64,这是一个 Unicode 字符串。

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

于 2019-02-11T14:58:17.817 回答