技术开发 频道

开发安全的ASP.NET应用程序

   基于角色的安全

  如果你需要鉴别用户,你同样需要为他们建立个性化的页面。这里有两大的选择:一是实现一个个人资料系统,为每个用户存储配置信息;二是定义一些角色,把用户映射到这些角色上。

  在第一种情况下,要维护个人资料记录,可能需要存储与用户界面有关的设置以及打开或关闭的功能。在设计页面时,访问这些个人资料记录来为当前用户生成相应的页面。

  如果你不必维护每个用户的信息,而只是要将用户分类并维护基于每一类的信息,那基于角色的方法就显得更好。一个角色是一个名称——一个简短的描述性字符串——它为属于这个角色的每个用户定义了一组功能、用户界面元素以及权限。

  定义角色需要两个步骤。首先,定义所有可能的角色,为每个用户分配其中的一个或多个。这通常在数据库层完成。典型的,你在存储用户名字和密码的数据库中加入一列来存储每个用户的角色。

  鉴别一个用户时,其身份并没有和任何角色信息关联。但是,有一个功能用来来检查某一个身份是否属于特定的已定义角色。可以使用Page.User对象的IsInRole功能来检验一个用户的角色: if(User.IsInRole(“Boss”))

  Response.Write(“The user is the boss”);

  定义角色的第二步是将每个已鉴别的用户与角色相关联。要这样做,你必须创建一个新的主体对象,其类型可以是普通的或与授权种类相同。通常在Global.asax文件中处理AuthenticateRequest事件时完成: //角色是根据当前用户从数据库中读出的字符串

  Context.User=new GenericPrincipal(User.Identity,role);

  这时,鉴别模块能够通过本地Web.config文件的区段来检验用户的角色。例如,一个其Web.config文件如下所示的文件夹里的页面只能被属于Boss角色的用户访问:   鉴别模块使用IsInRole函数通过角色来授权。

  保护你的应用程序

  保护一个Web应用程序就必须保护Web服务器不受各种攻击,但是它还需要实现有效的办法来阻止对页面的非法访问。ASP.NET提供了一些内建的代码来对用户和操作来进行鉴别和授权。

0
相关文章