信息: 方法中使用 ADSI 来查询第三方 LDAP 服务器

文章翻译 文章翻译
文章编号: 251195 - 查看本文应用于的产品
展开全部 | 关闭全部

本文内容

概要

轻型目录访问协议 (LDAP) 提供程序的 Active Directory 服务接口 (ADSI) 用于从第三方 LDAP 服务器中检索信息。本文介绍几个可能会出现的问题以及如何解决它们。

更多信息

当您使用 ADSI 从第三方 LDAP 服务器中检索信息时,您需要:
  • 确定架构信息的可用性。
  • 获取正确的身份验证。
  • 阻止不存在的容器的搜索。

确定架构信息的可用性

依照请求注释 (RFC) 2251 LDAP 版本 3 服务器应为根的目录服务企业 (rootDSE) 关闭一个 subSchemaSubEntry 属性公开。ADSI 将使用此属性来查找它然后试图验证和缓存的 subschema 信息。

ADSI 如何缓存在 subschema 的其他信息,请单击下面文章编号,以查看 Microsoft 知识库中相应的文章:
251189信息: 查找缓存通过 ADSI 一个 LDAP 服务器模式
ADSI 使用 subschema 信息公开某个给定的类正确的接口,并从属性缓存中检索正确的语法中的属性。

无法找到或 subschema 信息会正确验证 ADSI 是否它使用默认的 LDAP 版本 2 架构。因为 LDAP 版本 2 服务器不公开一个 subschema,ADSI 维护在内部有关许多标准属性和类的架构信息。如果 ADSI 使用默认的版本 2 架构,它并没有包括自定义的类或属性已在服务器上创建的非标准架构信息的访问。

是否可用属性的语法没有架构信息 ADSI 不能从属性缓存中检索属性。在这种情况下可以使用 IADsPropertyList.GetPropertyItem 方法指定请求的属性的属性的语法。您在指定一个 ADsTYPE 值时,避免需要有关该属性的语法信息。

如果您使用 Microsoft ActiveX 数据对象 (ADO),并且您不具有可用,您需要检索 ADsPath 字符串对象的架构信息绑定到的目录中, 对象,然后使用 IADsPropertyList.GetPropertyItem 方法。没有架构信息不直接使用 ADO 的解决方法。

获取正确的身份验证

LDAP 客户端以使用 ADSI LDAP 服务器进行身份验证的方法有多种。在这些的方法之间仅简单绑定是本身支持 LDAP 传递到服务器的凭据。在另外一些情况下,客户端和服务器必须同意在该方法通常与另一个使用安全颁发机构或 $ 专用协议。

例如,GetObject 方法 (或 C 中的 ADsGetObject 函数) 使用可能会导致 LDAP 绑定使用 Microsoft Windows NT 挑战与反应 (NTLM) 的 ADS_SECURE_AUTHENTICATION 标志。此绑定很可能失败,因为很多第三方服务器不接受 NTLM。如果将失败身份验证安全绑定被降级到匿名绑定 ; 例如对于简单绑定没有任何用户凭据。此位置应用程序可能只对具体情况取决于服务器的配置信息 (或甚至不信息) 的子集的访问。

若要防止出现这种情况,通过使用 OpenDSObject 方法 (或 C 中的 ADsOpenObject 函数) 来执行简单绑定并指定零 (没有任何标志) 或 ADS_FAST_BIND (下述) 为 lnReserved 参数。与该简单绑定将传递一个有效的属性化的用户名 (cn = 用户名,cn =...) 和到 LDAP 服务器以进行验证的密码。若要用 ADO 的简单绑定将 ADODB.Connection 对象的 加密密码 属性设置为 FALSE,,并将属性化的用户名和密码分别分配给的 用户 ID密码 属性。

防止不存在的容器上的搜索

默认状态下,ADSI 执行 objectClass 搜索的查询或绑定中指定的基对象。如果在指定的可分辨的名称不存在的目录中,此搜索将失败。

例如,假定的搜索设置为从开始处"o = Corp,c = 美国"的目录中的所有用户。目录结构是不实际的"公司"容器,但而不是两个对象的可分辨的名称与目录的根"ou = 北美洲,o = Corp,c = 美国"和"ou = 欧洲,o = Corp,c = 美国"。ADSI 将发出一个 objectClass 搜索"o = Corp,c = 美国"哪些失败开始前停止用户搜索。

在解决此问题的最简单方法是在目录中指定实际存在一个基对象。如果不可能,由于目录实施,执行一个有效的基对象具有所需的搜索您必须阻止 ADSI 执行初始 objectClass 搜索。

若在对象上的执行 objectClass 搜索传递 lnReserved 参数 OpenDSObject 方法 (或 C 中的 ADsOpenObject 函数) 中的 ADS_FAST_BIND 标志。此标志确定 ADSI 的操作绑定发生后,因为它不会影响适当的身份验证。请注意此标志不是可供 ADSI 版本 2.5 之前。

对于 Microsoft Windows 2000 ADO 提供程序公开 ADODB.Connection 对象上的 ADSI 标记 属性。您可以设置此属性,以防止 ADO 查询执行 objectClass 搜索 ADS_FAST_BIND 标志。ADSI 标志 属性未出现在 ADSI 2.5 版的 Microsoft Windows NT 版本 4.0 或 Windows 9 x。一个可能的解决方案,请参阅下面的文章:

223049匿名通过 ADSI HOWTO: 查询 Exchange 5.x

参考

ADSI 的详细信息,请参阅 Microsoft 知识库中下面的文章:
233023HOWTO: 查找所有的 ADSI 提供程序的系统上
187529HOWTO: 使用 ADO 通过一个 ADSI LDAP 提供程序的访问对象
251189信息: 查找缓存通过 ADSI 一个 LDAP 服务器模式
223049匿名通过 ADSI HOWTO: 查询 Exchange 5.x

ADSI 的一般信息,请参阅以下网站:
http://msdn2.microsoft.com/library/aa772170.aspx

属性

文章编号: 251195 - 最后修改: 2007年9月28日 - 修订: 1.3
这篇文章中的信息适用于:
  • Microsoft Active Directory Service Interfaces 2.5
关键字:?
kbmt kbinfo kbmsg KB251195 KbMtzh
机器翻译
注意:这篇文章是由无人工介入的微软自动的机器翻译软件翻译完成。微软很高兴能同时提供给您由人工翻译的和由机器翻译的文章, 以使您能使用您的语言访问所有的知识库文章。然而由机器翻译的文章并不总是完美的。它可能存在词汇,语法或文法的问题,就像是一个外国人在说中文时总是可能犯这样的错误。虽然我们经常升级机器翻译软件以提高翻译质量,但是我们不保证机器翻译的正确度,也不对由于内容的误译或者客户对它的错误使用所引起的任何直接的, 或间接的可能的问题负责。
点击这里察看该文章的英文版: 251195
Microsoft和/或其各供应商对于为任何目的而在本服务器上发布的文件及有关图形所含信息的适用性,不作任何声明。 所有该等文件及有关图形均"依样"提供,而不带任何性质的保证。Microsoft和/或其各供应商特此声明,对所有与该等信息有关的保证和条件不负任何责任,该等保证和条件包括关于适销性、符合特定用途、所有权和非侵权的所有默示保证和条件。在任何情况下,在由于使用或运行本服务器上的信息所引起的或与该等使用或运行有关的诉讼中,Microsoft和/或其各供应商就因丧失使用、数据或利润所导致的任何特别的、间接的、衍生性的损害或任何因使用而丧失所导致的之损害、数据或利润不负任何责任。
不再更新的 KB 内容免责声明
本文介绍那些 Microsoft 不再提供支持的产品。因此本文按“原样”提供,并且不再更新。

提供反馈

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com