dedecms织梦内容管理系统  
 
首页 | 方舟产品 | 系统优化 | 硬件系统 | 软件系统 | 网络系统 | 无盘网络 | 软件下载 | 杀毒防黑 | 专题 | 会员中心 | 方舟论坛
  当前位置:方舟系统站>系统优化>win 2003优化>文章内容
通过.NET Framework访问活动目录(2)
来源: 作者: 发布时间:2007-05-10  



这里的第一个构造器是一个基本的缺省构造器,能够在无需任何参数的情况下创建对象。这意味着该对象将在没有指定的安全权限的情况下连接到本机的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,
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:\winnt\microsoft.net\framework\v%VERSION%\config\machine.config)中的processModel节点,其中的username属性必须被设置成System。

结束语

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

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

共2页: 上一页 1 [2] 下一页
 
[收藏] [推荐] [评论(0条)] [返回顶部] [打印本页] [关闭窗口]  
用户名: 新注册) 密码: 匿名评论
评论内容:(不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
 §最新评论:
  热点文章
·升级windows 2003 sp2时提示产品
·win 2003最新优化大全
·win2003设置受限用户有关机权限
·windows 2003 优化大全
·Windows 2003 Server提速优化
·Windows2003安全事件ID列表
·Windows 2003 服务器管理经验
·Delphi深度探索-活动目录开发
·windows 2003 简化
·windows 2003在线升级补丁
·设置win2003 自动登录
·突破IIS连接数限制,Windows 200
  相关文章
·通过.NET Framework访问活动目录
·Windows 2000用户管理--活动目录
·windows 2000中的活动目录
·Windows2003中对域控制器重命名
·windows 2003 简化
·Windows 2003 Server提速优化
·升级windows 2003 sp2时提示产品
·Windows Server 2003中文版
·安装Windows 2003企业版
·如何配置和管理WinXP/2003系统服
·Win2003中IE安全区域的设置技巧
·Windows Server 2003实用技巧
  主题推广
方舟网络 版权所有|关于本站|隐私保护|