强大的目录服务接口工具ADSI

ZDNet软件频道 时间:2002-05-08 作者:BUILDER.COM |  我要评论()
本文关键词:AD
这篇文章主要讨论了如何使用ADSI访问活动目录,以及使用它来访问其他各类目录。

微软在发布活动目录的同时推出了用于Windows 2000操作系统的ADSI(Active Directory Services Interface:活动目录服务接口)。ADSI主要作为各类目录服务(例如Windows NT、Novell目录服务NDS、轻度目录访问协议LDAP以及活动目录)之间的一种强大、易用的开发接口。在这篇文章里,我将对ADSI在提升应用程序开发方面的作用进行阐述。首先让我们考虑下,在应用程序的设计阶段,你应该怎样整合目录访问功能。

在程序设计中加入目录访问功能

在应用程序具有目录访问功能之前必须在应用程序的设计阶段包含目录访问。在应用程序的设计阶段应该考虑以下几点:

  • 有能被利用的现有目录吗?在大多数企业环境下都存在一定的目录服务。与其在应用程序中增加其他目录或者用户信息存储单元还不如先调查下能否利用现有的目录。
  • 应用程序要求认证吗?目录具有认证和访问控制的基本体系。如果应用程序必须采取认证机制,那么用户可能也得接受目录认证。所以最好采用目录的认证实现单一认证机制。
  • 应用程序的用户分为不同的访问权限吗?不同的用户通常具有不同的应用程序访问权限。目录组的成员资格可以用来分配应用程序访问权利。在使用具有一定访问权限的目录组这种方式的情况下,你能显著降低应用程序的管理要求。
  • 应用程序需要同其他应用程序公用的用户信息吗?应用程序经常需要地址、电话号码或雇员工作号等诸如此类的用户信息。目录就是这类信息的中央存储单元而且因此降低了数据的复制量。
采用ADSI

在设计阶段搞清楚如何在应用程序中利用目录之后,接下来就是具体应用ADSI了。下面的示例用Visual Basic编写。如果你还想了解其他语言或其他目录下的有关信息请访问MSDN 上的ADSI文档。ADSI从Windows 2000开始即成为Windows操作系统的一部分。假如你想在Windows NT 4下使用ADSI,那么你得从微软的网站下载它

ADSI访问

因为ADSI是一种COM接口,所以你的Visual Basic应用程序中必须加入对ADSI类库的引用。为此,请打开Project | References然后选中Active DS Type Library。

ADSI绑定一个活动目录对象
为了能利用活动目录对象,你必须绑定指定对象。清单A中的代码显示了ADSI对象的声明,同时绑定了一个名为Test User的活动目录用户。

现在就让我们看看这个例子的关键部分。首先,我们把oADUser声明为IADsUser对象,该对象类型在ADSI类库中定义。接着,我们把oADUser实例化为Test User对象,并由该对象使用LDAP访问活动目录。注意,LDAP查询包括了用户的完整区分名,Test User位于Demo域内的Test OU。

访问对象信息

绑定希望的用户之后,你可以用Get方法再附带需要获取的属性名访问用户的属性。清单B演示了从活动目录获取公共用户属性的情况。

修改对象信息

你刚才已经明白了如何访问对象的属性,但是,这些对象的属性又该如何修改呢?答案是采用Put方法修改对象的属性。为了把属性的变动写入目录你还得调用SetInfo方法(注意,应用程序所在的安全环境必须有权修改对象的属性。比如说,在清单C里,假如应用程序运行在用户的活动目录帐号下而用户想修改他的电话号码,那么用户必须拥有修改自己对象属性的权限)。

可以用到哪些属性?

我们在以上的例子中已经演示了一些属性,但是你可能不太清楚哪些属性可以由你操作。在目录下的对象和属性都是由目录的schema来定义的。在先前例子里的属性是活动目录schema中的缺省属性。各种各样的目录都有它们自己浏览可用属性的方法。对活动目录来说,ADSI Edit工具可以浏览整个活动目录、查看目录中的所有对象及其关联的属性。

如果你需要的某一个对象或属性不可用,没关系,大多数目录都允许你扩展schema以增加定制的对象和属性。然而,扩展schema可小心了。具有大型目录的大多数企业在扩展schema时都有严格的要求。

检查组的成员

分组是实现授权访问机制的简捷途径。由于目录可能已经具备安全组或者邮件组,所以你可以快速通过具有不同权限的分组实现对应用程序的访问控制。清单D中的例子即检查我们的oADUser是否属于Payroll组的成员。

说真的,头一回编写这些代码的时候我真感到吃惊,想不到检查组的成员会这么简单!关键在于Groups方法和IADsMembers对象。Groups方法返回用户所在组的IADsMembers集合。

检索用户

在对oADUser对象实例化时候,我们用用户的完整区分名索引用户。你可以查Global Catalog这个活动目录的快速查询子集获取用户的区分名。此外,就这一查询而言,你还可以从中了解ADO(Active Data Object)和ADSI的协同工作原理。为此,你首先需要找出Global Catalog的区分名,方法是查询活动目录。然后你用ADO查询活动目录,如清单E所示。

然后按照查询字符串执行活动目录查询。返回的recordset可以照普通ADO的recordset读取。如何查询活动目录的完整代码请看清单F

小结

ADSI是处理目录的有力工具。这篇文章主要讨论了如何使用ADSI访问活动目录,但是你也能使用它来访问其他各类目录。采用ADSI能让你充分利用已经存在在公司目录中的普通用户信息。ADSI的更多信息请参考MSDN。

责任编辑:炒饭

百度大联盟认证黄金会员Copyright© 1997- CNET Networks 版权所有。 ZDNet 是CNET Networks公司注册服务商标。
中华人民共和国电信与信息服务业务经营许可证编号:京ICP证010391号 京ICP备09041801号-159
京公网安备:1101082134