微软在发布活动目录的同时推出了用于Windows
2000操作系统的ADSI(Active Directory Services Interface:活动目录服务接口)。ADSI主要作为各类目录服务(例如Windows
NT、Novell目录服务NDS、轻度目录访问协议LDAP以及活动目录)之间的一种强大、易用的开发接口。在这篇文章里,我将对ADSI在提升应用程序开发方面的作用进行阐述。首先让我们考虑下,在应用程序的设计阶段,你应该怎样整合目录访问功能。
在应用程序具有目录访问功能之前必须在应用程序的设计阶段包含目录访问。在应用程序的设计阶段应该考虑以下几点:
在设计阶段搞清楚如何在应用程序中利用目录之后,接下来就是具体应用ADSI了。下面的示例用Visual Basic编写。如果你还想了解其他语言或其他目录下的有关信息请访问MSDN
上的ADSI文档。ADSI从Windows
2000开始即成为Windows操作系统的一部分。假如你想在Windows NT 4下使用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。