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

【2 通过.NET Framework访问活动目录】
这里的第一个构造器是一个基本的缺省构造器,能够在无需任何参数的情况下创建对象 。这意味着该对象将在没有指定的安全权限的情况下连接到本机的WinNT提供者 。

第二个构造器使我们能够指定连接到给定域的AD上所需要的证书,在需要使用给定的证书连接到任意域名时,这一构造器非常方便 。

第二个构造器中增添了LoginPath参数,这将使我们能够覆盖LoginPath,能够选择缺省提供商之外的其他服务提供者 。

下面的代码被我称为“活动方法”,代码如下所示:


public DSHelper.DSUser LoadUser(string username)

这一方法用来接收用户名,并在当前的提供者中查找DirectoryEntry 。如果没有找到,就简单地返回NULL 。

public System.Boolean AddUserToGroup(string groupname, DSHelper.DSUser dsUser)

这一方法接收现有组的名字和定制的DSUser类的实例,并试图将用户添加到提供的组中 。这也是第一个我们能看到impersonation的方法() 。这一方法的核心是下面这行代码:

public System.Collections.ArrayList GetGroups()

我们将使用该方法获得域中所有组的名单 。

public System.Boolean DeleteUser(DSHelper.DSUser dsUser)

这一方法获得给定的用户名,并从活动目录中完全删除它 。

public System.DirectoryServices.DirectoryEntry SaveUser(DSHelper.DSUser dsUser)

没有实际的在数据库中保存和插入记录的能力,就不能被称为一个完整的DAL 。上面的方法可以完成这二项任务,它首先检查AD,看是否有指定的用户存在 。如果存在,,则会用我们提供的数据更新该用户 。如果用户不存在,就会创建一个用户 。

public System.Boolean Connect()

最后,我们需要一个方法,与数据库进行连接,Connect()就是用来完成这一任务的方法 。需要指出的是,此时,它不执行任何假冒的操作或指定使用AD的证书,我们只在需要的时候才提供证书,这就使得在没有提供安全证书的情况下,DAL只能在只读的状态下使用 。

下面我们将上面的内容串起来,来看看我们如何使用DAL创建ASP.NET用户管理页 。

ASP.NET用户管理页

在这一例子工程中,我们能够为系统管理员用户输入用户名和口令,它还提供了一个文本框,我们可以输入域中任何用户的名字,就会列出其所有属性 。我们还可以对用户进行编辑、保存操作,也可以完全删除该用户 。

现在我们来详细地回顾整个工程,其中重点是与DAL进行交互的部份 。请读者考虑使用新的方法改进界面,并实际地创建一个可用性更高以及更友好的设计 。另外,读者也可以考虑如何使用控制台应用程序创建界面 。

扮演

“扮演”这个词的意思是,我们以其他人或用户的身份执行操作 。在我们的ASP.NET应用程序中,这意味着我们可以暂时地客串其他用户,而不是IIS用来处理匿名访问的缺省帐户的ASP.NET用户 。我们希望能够使自己的代码扮演对AD资源有更大访问权限的其他用户,以便对资源进行适当的修改 。要完成这一过程非常简单 。

#region setup impersonation via interop
//需要保存详细资料时,为完成扮演需要通过InteropServices从COM中导入
public const int LOGON32_LOGON_INTERACTIVE = 2;
public const int LOGON32_PROVIDER_DEFAULT = 0;
System.Security.Principal.WindowsImpersonationContext impersonationContext;
[DllImport("advapi32.dll", CharSet=CharSet.Auto)]public static extern int
LogonUser(String lpszUserName,
String lpszDomain,String lpszPassWord,int dwLogonType,int dwLogonProvider,
ref IntPtr phToken);
[DllImport("advapi32.dll", CharSet=System.Runtime.InteropServices.CharSet.Auto,

推荐阅读