我有一个第三方 Web 应用正在运行 LDAP 查询,以查找用户的电子邮件地址是否存在于 AD 中。查询如下所示:
(&(objectClass=user)(proxyAddresses=SMTP:[email protected]))
我proxyAddresses
在 AD 中的属性值如下所示:
X500:/o=foo/ou=foo Group (ABC123)/cn=Foo3/cn=foouser (blah)123; SIP:[email protected]; smtp:[email protected]; smtp:[email protected]; SMTP:[email protected]
Web 应用程序返回的结果为空。当我使用 AD Explorer 检查时,我看到了类似的结果。此外,当我在 AD Explorer 中查看原始输出时,它将整个属性值放在一行上,而不是在单独的行上显示每个 SMTP 和 X500 条目。
所有这些都使我认为该值可能没有被正确界定。
当我将该属性与另一个环境进行比较时,另一个环境的值之间没有空格。
例如...我的:
X500:/o=foo/ou=foo Group (ABC123)/cn=Foo3/cn=foouser (blah)123; SIP:[email protected]; smtp:[email protected]; smtp:[email protected]; SMTP:[email protected]
其他环境:
X500:/o=foo/ou=foo Group (ABC123)/cn=Foo3/cn=foouser (blah)123;SIP:[email protected];smtp:[email protected];smtp:[email protected];SMTP:[email protected]
我的问题是:
是否允许使用带有空格的分号作为 Active Directory DirectoryString 属性值的分隔符?
答案1
从查询的角度来看,分隔符实际上只是用于呈现数据的一种装饰性显示选项。不同的工具将以不同的方式显示多个值。请确保在两个环境中使用同一工具的同一版本。
attributes
中的选项卡使用DSA.MSC
带空格的分号,但打开该属性以使用 DSA 进行编辑,您将获得一个列表,其中每个属性都在一个新行上。您可以使用其他一些方法来查询和显示:CSVDE
将生成一个使用分号的文件。Get-Aduser
将在常规查询中使用“,”但在展开属性时使用换行符。
csvde -r "(samaccountname=roadRunner)" -f this.csv -l proxyaddresses
get-aduser -ldapfilter "(samaccountname=roadRunner)" -prop proxyaddresses
(get-aduser -ldapfilter "(samaccountname=roadRunner)" -prop proxyaddresses).proxyaddresses
当您运行相同的查询时是否找到用户?get-aduser -ldapfilter "(&(objectClass=user)(proxyAddresses=SMTP:[email protected]))"
答案2
我认为,对于多值属性,不存在诸如定界符或分隔符之类的东西。
如果使用 ldif 文件导入或导出数据,格式如下:
dn: dc=example,dc=com
objectClass: top
objectClass: domain
dc: example
description: This is the first description value
description: This is the second description value
如果我使用标准 dsquery 工具查询我的帐户,我也会得到这种格式
dsquery * "cn=my user name,ou=whatever,dc=sub,dc=domain,dc=tld" -scope base -attr * | findstr /i
proxyAddresses: smtp:[email protected]
proxyAddresses: SMTP: [email protected]
...
从 Linux 主机使用 ldapsearch 会得到相同的 ldif 格式。所以我的猜测是应用程序没有正确解析过滤器的结果,它应该循环遍历返回的值列表。如果没有,那么在我看来,他们的代码中有一个错误。
根据微软Proxy-Addresses 属性不是单值的,其语法是字符串 unicode。此外,msdn 上有一个关于单值属性和多值属性之间差异的小条目微软,但它没有提及任何有关分隔符或格式的内容(仅指出条目不能为空)。