2 通过.NET Framework访问活动目录( 二 )


SetLastError=true)]public
extern static int DuplicateToken(IntPtr hToken, int impersonationLevel,
ref IntPtr hNewToken);
#endregion

图1.5 建立扮演

首先,我们需要从advapi32.dll中导入新的方法,其中包括一些有用的常量 。名字为impersonationContext的变量将用来保持扮演操作之前的Windows用户 。

这样,我们就建立了扮演,下面是一个如何使用它的例子:

if(impersonateValidUser(this.LoginUsername, this.DomainName,
this.loginPassword)) {
//在这里插入在指定用户的安全环境下运行的代码
//不要忘记取消扮演
undoImpersonation();
} else {
//扮演操作失败了,插入保证失败后系统安全的机制
}

图1.6 扮演的使用

我们只需要简单地以有效的用户名和口令调用impersonateValidUser方法,来扮演该用户 。从现在开始,只到调用undoImpersonation()之后,我们将以给定的用户名执行所有的操作 。

为了使ASP.NET下的扮演操作能够正常地工作,我们应当改变Machine.config(c:winntmicrosoft.netframeworkv%VERSION%configmachine.config)中的processModel节点,其中的username属性必须被设置成System 。

结束语

本篇文章所论述的是使用System.DirectoryServices名字空间完成一个能够完全地运行的、面向任何提供商AD的DAL所必需的基本内容 。在实际应用中,可以对该例子进行改变,使这更符合我们的要求 。需要记住的是,对于任何能够实际使用的DAL,它不应当只局限于包括正常的数据库提供者在内的一种服务提供者 。我们应当能够交换DAL 。

看过本篇文章后,读者可能感到有一种意犹未尽的感觉 。读者可能希望在其中添加组管理的功能,其中包括组的创建、编辑和删除,并显示每个用户所属的组以及每个组中的用户 。不过这些都需要通过COM Interop才能完成,请读者自行参阅有关资料 。

推荐阅读