王朝网络
分享
 
 
 

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

王朝c#·作者佚名  2006-11-24
宽屏版  字体: |||超大  

这里的第一个构造器是一个基本的缺省构造器,能够在无需任何参数的情况下创建对象。这意味着该对象将在没有指定的安全权限的情况下连接到本机的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才能完成,请读者自行参阅有关资料。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
>>返回首页<<
推荐阅读
 
 
频道精选
 
静静地坐在废墟上,四周的荒凉一望无际,忽然觉得,凄凉也很美
© 2005- 王朝网络 版权所有