当前位置: 首页 > 图文教程 > 网络编程 > ASP.NET > ASP.NET安全问题--ASP.NET安全架构

ASP.NET
ASP.NET开发:简化应用程序的开发支持Web标准
asp.net XMLHttpRequest实现用户注册前的验证
asp.net 页面间传值方法小结
asp.net url重写浅谈
asp.net 验证码生成和刷新及验证
C#精髓 GridView72大绝技 学习gridview的朋友必看
实例说明asp.net中的简单角色权限控制
asp.net网站开发包wq.dll打包下载
js与ASP.NET 中文乱码问题
asp.net checkbox 动态绑定id GridView删除提示
asp.net TextBox回车触发事件 图片在img显示
asp.net 脏字典过滤问题 用正则表达式来过滤脏数据
asp.NET 脏字过滤算法
asp.NET 脏字过滤算法 修改版
asp.net sql 数据库处理函数命令
asp.net Javascript 的几种写法与提示
ASP.NET MVC学习笔记
asp.net 中国身份证号码验证代码 非正则
Asp.net中使用Sqlite数据库的方法
asp.net 中文字符串提交乱码的解决方法

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


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-08-14   浏览: 70 ::
收藏到网摘: n/a

在开发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.把用户的凭证或者角色与被允许的用户或者角色进行比较,如果用户在列表中,那么他们就被准许访问这个资源,否则,拒绝。

如果启用了假冒,那么在这两种情况下,假冒都会发生。默认情况下,假冒是禁止的,可以修改配置文件添加元素启用:

以下为引用的内容:
 <configuration>
  <system.web>
   <identity impersonate="true" userName="Xiaoyang/User" password="xiaoyang"/>
  </system.web>
 </configuration>

 

 

中,把impersonate特性设置为true,拿userName和 password设为要假冒的用户账户。 如果假冒被启用,那么被审核的就是假冒的用户标识的凭证,而不是提交的凭证。这两种凭证有可能相同,需要注意的是:假冒是利用Web服务器中已有的用户访问,如IUser用户。

小洋