ASP.NET安全问题--ASP.NET安全架构

                                          ASP.NET安全架构

       前言:上篇文章谈了很多的理论的东西,所以决定先跳过一些理论的讲解,先看看ASP.NET的安全架构,到下篇就再讲讲理论知识,这样穿插起来讲可能效果更好。而且本篇注重与很多常见概念的解释,相信大家看完后一定有一些收获的。
 

系列文章链接:

ASP.NET开发安全问题

ASP.NET安全问题-- 创建安全的Web应用程序

ASP.NET安全问题--ASP.NET安全架构

ASP.NET安全问题--ASP.NET安全架构--如何实现.NET安全

ASP.NET安全问题--ASP.NET生命周期中的验证以及身份验证模块

ASP.NET安全问题--Forms验证的具体介绍(上篇)

ASP.NET安全问题--Froms验证的具体介绍(中篇)

ASP.NET安全问题--Forms验证(后篇)--实战篇

ASP.NET安全问题--ASP.NET中的授权问题(前篇)

       在开发Web程序中,我们可以选择用自己的方法来实现安全的策略,或者可以购买第三方的安全代码和产品,不管怎么样,都是要很大的花费的,幸好在.NET Framework中已经内置了安全的解决方案。        ASP.NET和 .NET Framework 联合IIS为Web应用程序安全提供了一个基础结构。它的一个很明显的优势在于我们不必再编写自己的安全架构,我们可以利用.NET安全架构的内置的特性,而且整个安全的架构是经过测试和时间的考验了的。

       .NET安全架构包含了很多的类,这些类用来处理身份验证,授权,基于角色的授权,假冒(Impersonation),代码访问安全,还包含了一个用于构建自定义解决方案的基本架构。
 
       本篇我们主要谈论下面的一些话题:
       ASP.NET安全架构的主要功能
       身份验证和授权
       安全上下文中的标识和主体
       身份验证模块的运行
       授权模块的运行

       下面就开始:
       一 ASP.NET实现安全的过程 
       ASP.NET 安全架构分为几个关键的安全过程:身份验证,授权,假冒,加密提供提供了必需的功能。具体看看一些解释:
       身份验证--指明是谁再访问我们的站点
       授权----谁可以对哪些资源操作和访问?访问站点的用户是否被授权使用他所请求的资源?
       假冒----准备假冒什么角色?(注:假冒不是贬义词,不是我们常说的假冒商品的假冒,因为不同的用户角色有不同的权限,如果  我们当前的用户无法访问某一特定的资源,我们就可以让想访问特定资源的用户假冒,更确切的说是模仿有权限访问特定资源的用户,简言之:用户A想访问C资源,但是没有权限,但是用户B可以访问,所以A和B商量,A就用B的身份访问。具体的以后讲解)


       下面我们具体看看每个安全的过程:
       1.身份验证
       身份验证是揭示用户标识(注:标识的概念我们后面马上就讲的,简言之,用户的ID 和 名称)并判断标识真实性的过程。很好理解,举个例子(大家注意例子中的一些术语):我们要取参加一个会议,我们就会取登记提供我们的一些证件即标识(表明我们的身份),一旦标识被确认,我们就会得到会议通行证,我们就可以带着通行证参加会议。而且会议中的每个人都可以通过我们的通行证了解我们的一些信息,如我们的名字,公司。身份验证就是:一旦标识被确定,我们就会得到一个可以识别我们的令牌,所以,再一个特定的区域内,不管我们在哪里,我们的标识都可以被识别。


       在ASP.NET中,有4中身份验证的模式:
       Widows身份验证(Windows Authentication)
       Forms身份验证(Form Authentication)
       Passpot身份验证(Passport Authentication)
       自定义身份验证

       对于每一种身份验证,用户都需要在登录的时候提供凭证,一旦标识被核实,用户就会获得一个身份验证令牌,在Forms验证中,整个令牌就是FormsAuthenticationTicket,整个令牌就放在 cookie中,每次请求资源的时候,令牌就会提供用户的标识信息。

       2.授权
       我们接着拿之前的那个会议的例子来看,授权就是表明我们可以做什么。进入会议厅以后,发现有很多不同的会议,专家级的,普通级的,不同人参加不同级别的会议。而且有些人可以参观整个会议厅,但是有些人只能在展览厅参观。这就是权限的不同而导致的。


       所以,授权就是:以我们的标识信息为参考,批准或者拒绝访问我们请求的资源。还有一点要注意的是:我们一般是常用的是基于角色的授权,就是把用户分为一组一组,然后给每组不同的角色。
 
       假冒
       假冒是在其他用户标识的上下文中执行代码的过程。在默认情况下,所有的ASP.NET代码都是在Domain/ASPNET用户账户下执行的,要利用其他的标识执行代码,假冒其他的标识,我们应该利用.NET安全架构中的内置的假冒的功能。它允许我们指定执行代码的用户账户,比如不同于Domain/ASPNET的预定用户账户。我们既可以利用ASP.NET中身份验证功能来验证用户,也可以利用标准的Windows身份验证来验证用户。

      然后我们可以利用我们的凭证,或者利用执行代码的预定义用户账户来设置所假冒的账户。
 
       假冒还允许我们在不使用ASP.NET提供的身份验证和授权功能的情况下提供身份验证和授权:我们可以利用用户账户和他们相关权限支持Windows和IIS管理身份验证和授权。
  
       假冒通常用于提供访问控制,比如授权,一个应用程序可以访问它所假冒的的用户可以访问的任何资源。例如,默认情况下,Domain/ASPNET用户不能对文件系统进行读写操作的,所以这个用户账户也无法在Enterprise Services中执行事务处理。但是利用假冒,用户就可以通过假冒一个特定的Windows账户完成这些事情,因为这个特定的账户有这个权限。因此,我们就可以保证一些用户可以对文件系统进行读写操作,而其他的一些用户仅仅执行读的操作。

       好了,上面讲了很多,我们现在就来小结一下,看看如何把身份验证,授权,假冒一起用于Web程序中。


       当用户首次访问Web站点时,他们是匿名用户,我们不知道他们的标识,除非对他们进行身份验证,否则我们以后还是不知道他们的标识。当用户请求非安全的资源时,他们可以自动的访问这个资源(这就是非安全资源的定义)


       当用户请求安全的受保护的资源时,就要如下步骤:
       1.请求被发送到 Web服务器,由于此时这个用户标识还有被确认,所以用户就被重定向到登录页面
       2.用户提供凭证,身份验证就对凭证进行验证和审核
       3.如果用户凭证合法,就可以访问资源,否则,就不能。

       当用户请求安全的资源,但是该资源有特定权限的用户才能访问,就会发生下面步骤:
       1.请求被发送到 Web服务器,由于此时这个用户标识还有被确认,所以用户就被重定向到登录页面
       2.用户提供凭证,身份验证就对凭证进行验证和审核
       3.把用户的凭证或者角色与被允许的用户或者角色进行比较,如果用户在列表中,那么他们就被准许访问这个资源,否则,拒绝。
 
 
 
       如果启用了假冒,那么在这两种情况下,假冒都会发生。默认情况下,假冒是禁止的,可以修改配置文件添加<identity>元素启用:
 <configuration>
  <system.web>
   <identity impersonate="true" userName="Xiaoyang/User" password="xiaoyang"/>
  </system.web>
 </configuration>
 

       在<identity>中,把impersonate特性设置为true,拿userName和 password设为要假冒的用户账户。 如果假冒被启用,那么被审核的就是假冒的用户标识的凭证,而不是提交的凭证。这两种凭证有可能相同,需要注意的是:假冒是利用Web服务器中已有的用户访问,如IUser用户。
 
       今天就先到这里,写太长了,大家不看着也累,下篇讲解.NET中实现安全,讲讲IPrincipan,Identity.

 

       注:转载要表明出处!

 

posted @ 2009-05-01 10:11 小洋(燕洋天) 阅读(...) 评论(...) 编辑 收藏