您的位置:软件 > 开发者网络 > 微软开发专栏 > 技术专题 > 正文
.NET框架中基于角色的安全性
[文章信息]
作者:sPhinX
时间:2004-04-21
出处:yesky
责任编辑:方舟
[文章导读]
传统的安全模型将安全性建立在用户以及用户组的机制上来提供隔离和访问控制
advertisement
热点推荐
· IE最新安全漏洞补救几大措施
· M牛的网络生活之下载篇
· Norton Ghost 9.0全新体验
· InstallShield简明使用教程之前言
· Linux系统的硬件驱动程序编写原理
[正文]

上一页  1 2 3 4  下一页

  Principal对象

  Principal对象是实现了IPrincipal接口的类的实例,这些对象用来表示用户,并且包括了用户的身份信息。System.Security.Principal命名空间包括了几种类型的Principal类,这些类中封装了程序代码运行的的安全环境(security context)。我们在后面将会看到对用户名和角色进行检查以确定根据用户身份和角色资格是否可以让用户执行某些特定操作的示例代码。

  对于每一个线程来说都与一个principal对象相关联。这个principal对象包括了表示运行当前线程的用户的identity对象。我们可以利用Thread类的静态属性CurrentPrincipal来获得这个principal对象。

  下面我们来看看IPrincipal接口,该接口只有一个Identity公共属性和IsInRole公共方法:

  1、Identity属性指向一个与principal 对象关联的IIdentity对象。

  2、IsInRole方法需要一个字符串参数,该字符串是一个角色的名称,并且返回布尔值,指出principal对象是否属于指定的角色。

  由于实际开发的需要,我们更多接触到的是WindowsPrincipal类,下面将详细讨论WindowsPrincipal类,相对而言,GenericPrincipal类就要简略一些了。

  GenericPrincipal类

  GenericPrincipal类用来表示一个通过自定义验证的用户,通常与GenericIdentity类一起使用。下面是一段简单的程序,说明了这两个类如何使用:

//创建一个GenericIdentity对象
IIdentity myGenericIdentity = new GenericIdentity(strUserName, "MyAuthenticationType");

//创建一个GenericPrincipal对象
String[] roles = null;
GenericPrincipal myGenericPrincipal = new GenericPrincipal(myGenericIdentity, roles);

//将创建的GenericPrincipal对象附加到当前线程上
Thread.CurrentPrincipal = myGenericPrincipal;

  注意在上面的例子中,我们可以把MyAuthenticationType的验证类型换成熟知的Kerberos身份验证或者NTLM身份验证。

  下面是验证的过程:

//取得当前线程的principal对象
IPrincipal principal = Thread.CurrentPrincipal;

if (!principal.Identity.Name.Equals("TrustedUser"))
{
throw new SecurityException(
strUserName + " NOT PERMITTED to proceed.\n");
}
Console.WriteLine(
strUserName + " is PERMITTED to proceed.\n");

  WindowsPrincipal类

  WindowsPrincipal类作为我们在开发中最常遇到的实现了IPrincipal接口的类,构造函数相当简单:
public WindowsPrincipal(WindowsIdentity ntIdentity);

  下面的代码说明了如何创建一个WindowsPrincipal对象:

WindowsIdentity wi = WindowsIdentity.GetCurrent();
WindowsPrincipal wp = new WindowsPrincipal(wi);

  WindowsPrincipal类中需要注意的是下面这三个重载的IsInRole方法:

public virtual bool IsInRole(int);

  第1个重载函数接受一个整型参数,该参数表示用户组对应的RID(RID也就是与域相关联的下级凭证(domain-relative subauthority)ID)。RID值定义在Platform SDK的头文件Winnt.h中,Winnt.h中包括一些常见的用户和组,比如DOMAIN_USER_RID_ADMIN、 DOMAIN_USER_RID_GUEST、DOMAIN_GROUP_RID_ADMINS、DOMAIN_GROUP_RID_USERS和DOMAIN_GROUP_RID_GUESTS等等,可以在...\Microsoft Visual Studio .NET\Vc7\PlatformSDK\Include文件夹中找到该文件。

public virtual bool IsInRole(string);

  第2个重载函数接受一个字符串参数,该参数表示一个用户组名称,比如MYCOMPUTER\Developer(MachineName\GroupName)表示了机器名为MYCOMPUTER的计算机上的Developer用户组。不过对于系统内置的用户组就不能这样表示了,比如Administrators,不能表示为MYCOMPUTER\Administrators,而应该像BUILTIN\Administrators这样,不过这样总觉得有点多余,不够自然。于是我们可以使用下面的重载函数。
public virtual bool IsInRole(WindowsBuiltInRole);

  第3个重载函数接受一个WindowsBuiltInRole枚举类型参数,下面就是WindowsBuiltInRole枚举中定义的值:

  1、AccountOperator- 管理计算机上或域中的用户帐号。

  2、Administrator- 可以任意访问计算机或域

  3、BackupOperator- 可以在文件系统上执行备份和恢复操作。

  4、Guest- 和User类似,不过有更多的限制。

  5、PowerUser- 和Administrator地位相近,不过有一些限制。

  6、PrintOperator- 执行打印操作。

  7、Replicator- 在域中执行文件复制。

  8、SystemOperator- 管理计算机。

  9、User- 用户不能执行危害系统或者影响整个系统的操作。


上一页  1 2 3 4  下一页

·"WAP天极之IT新闻资讯,50万元等你拿"    ·天极WAP之游戏狂图,50万元等你下载

天极社区邀请您:写博客日记  上传相片   论坛聊天  订阅电子杂志  推荐网摘   免费图铃工具
笔名:   请您注意:

 遵守国家有关法律、法规,尊重网上道德,承担一切因您的行为而直接或间接引起的法律责任。

 天极网拥有管理笔名和留言的一切权利。
评论:
 

发表评论推荐给朋友我想参加相关培训打印我对此感兴趣订阅电子杂志
相关内容阅读排行榜
  • 基于.NET的多用户客户端设计
  • ADO.NET实用技巧两则
  • DataSet的数据并发异常处理
  • 使用ADO.NET设计数据库应用程序
  • 从 .NET 程序集提供图像
  • 详解11月三大硬件杀手游戏及四大凶器
  • 选硬盘 用好希捷互动存储专家
  • NDS十大最受期待游戏
  • 中国星际个人联赛第6轮综述
  • 教你破解GeForce6800变Ultra
  • 魔兽UD必胜的几大原因
  • 韩国OnGameNet职业联赛最新战况
  • 买LCD有秘诀 两绝招识别坏点
  • Advertisement