我有一个第三方 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 属性值的分隔符?
我认为多值属性没有分隔符或分隔符。
如果您使用 ldif 文件导入或导出数据,格式如下所示:
如果我使用标准 dsquery 工具查询我的帐户,我也会得到这种格式
在 linux 主机上使用 ldapsearch 可以得到相同的 ldif 格式。所以我的猜测是应用程序没有正确解析过滤器的结果,它应该循环遍历返回的值列表。如果没有,那么在我看来,他们的代码中存在错误。
根据msdn的 Proxy-Addresses 属性不是单值的,它的语法是string unicode。另外,msdn 有一个关于单值和多值属性msdn之间差异的小条目,但它没有说明任何关于分隔符或格式的内容(只是条目可能不是空的)。
从查询的角度来看,分隔符实际上只是一个用于呈现数据的装饰性显示选项。不同的工具将以不同的方式显示多个值。确保您在两种环境中使用相同版本的同一工具。
中的
attributes
选项卡DSA.MSC
使用带空格的分号,但打开该属性以使用 DSA 进行编辑,您会得到一个列表,其中每个属性都位于新行上。您可以查询和显示的其他一些方法:CSVDE
将生成一个使用分号的文件。Get-Aduser
将在一般查询中使用“,”,但在展开属性时使用换行符。当您运行相同的查询时是否找到了用户?
get-aduser -ldapfilter "(&(objectClass=user)(proxyAddresses=SMTP:[email protected]))"