编辑
有用+1

# .NET Framework

.NET Framework是用于Windows的新托管代码编程模型。它强大功能与新技术结合起来，用于构建具有视觉上引人注目的用户体验的应用程序，实现跨技术边界的无缝通信，并且能支持各种业务流程。

## 目 录

  1 起源

  2 简介

  3 版本

  1. 3.1 简述
  2. 3.2 .NET Framework 1.0
  3. 3.3 .NET Framework 1.1
  4. 3.4 .NET Framework 2.0
  5. 3.5 .NET Framework 3.0
  6. 3.6 .NET Framework 3.5
  7. 3.7 .NET Framework 4.0
  8. 3.8 .NET Framework 4.5

  4 功能

  1. 4.1 第一点
  2. 4.2 第二点
  3. 4.3 第三点
  4. 4.4 第四点
  5. 4.5 第五点
  6. 4.6 第六点
  7. 4.7 第七点
  8. 4.8 第八点
  9. 4.9 第九点

  5 特色

  1. 5.1 软件环境
  2. 5.2 安全结构

  6 安全方案

  1. 6.1 安全规则
  2. 6.2 编程错误
  3. 6.3 受益的安全措施

  7 认证授权

  1. 7.1 认证过程
  2. 7.2 可通过的认证
  3. 7.3 提供证书
  4. 7.4 授权目的

  8 隔离存储

  1. 8.1 基完善目录于证据的安全
  2. 8.2 基于角色的安全
  3. 8.3 声明式安全
  4. 8.4 强迫式安全

## 1 起源

.NET Framework 组件概观

.NET Framework(又称 .NET 框架)是由微软开发，一个致力于敏捷软件开发（Agile software development）、快速应用开发（Rapid application development）、平台无关性和网络透明化的软件开发平台。.NET是微软为下一个十年对服务器和桌面型软件工程迈出的第一步。.NET包含许多有助于互联网和内部网应用迅捷开发的技术。.NET Framework 是微软公司继Windows DNA之后的新开发平台。

## 2 简介

.NET Framework 是以一种采用系统虚拟机运行的编程平台，以通用语言运行库（Common Language Runtime）为基础，支持多种语言（C#、VB、C++、Python等）的开发。.NET也为应用程序接口（API）提供了新功能和开发工具。这些革新使得程序设计员可以同时进行Windows应用软件和网络应用软件以及组件和服务（web服务）的开发。.NET提供了一个新的反射性的且面向对象程序设计编程接口。.NET设计得足够通用化从而使许多不同高级语言都得以被汇集。.NET Framework 中的所有语言都提供基类库(BCL)。[1]
.NET编译平台由核心组件及其他构件（开发工具及协议、WEB客户端及终端用户应用、WEB服务及企业服务器）所组成。微软的Windows作为操作系统运行于.NET框架之下，在Windows XP SP2/Windows Server 2003/Windows Vista系统中内置.NET框架，它也可以安装在大多数老版本的Windows系统中。.NET框架作为.NET开发平台的核心组件为Web服务及其它应用提供构建、移植和运行的环境。.NET组件是一个带有动态链接库扩展的预编制类模块。在运行的时候，通过使用一个用户使用程序被激活并加载到内存中。.NET组件是用于创建网络和Windows应用程序的，这些应用程序使一个应用程序所需的功能可以显示在外部。.NET平台还包含Web表单，Web表单是可从网上下载的标准接口。一个Web表单包含供使用者输入数据资料的文本框。然后使用者可以将表单提交给接收器。.NET平台至关重要的一部分就是网络服务器。网络服务器查询协议和标准的合集。应用程序可以使用网络服务器通过计算机网络交换数据资料。例如，当你在线上订购火车票，并输入你的信用卡卡号付款时，你就在使用网络服务器。

稳定版本 | 4.5
操作系统 | Windows 98，Windows NT 4.0，Windows Server 2003，Windows XP， Windows Vista，Windows Server 2008，Windows 7，Windows 8，Windows Server 2012
类型 | 系统平台
许可协议 | 许可协议Proprietary software

## 3 版本

### 简述

版本 | 完整版本号 | 发行日期 | Visual Studio | Windows 默认安装
--- | --- | --- | --- | ---
1.0 | 1.0.3705.0 | 2002-02-13 | Visual Studio .NET 2002 | Windows XP Media Center Edition Windows XP Tablet PC Edition
1.1 | 1.1.4322.573 | 2003-04-24 | Visual Studio .NET 2003 | Windows Server 2003
2.0 | 2.0.50727.42 | 2005-11-07 | Visual Studio 2005 |
3.0 | 3.0.4506.30 | 2006-11-06 |  | Windows Vista Windows Server 2008
3.5 | 3.5.21022.8 | 2007-11-19 | Visual Studio 2008 | Windows 7 Windows Server 2008 R2
4.0 | 4.0.30319.1 | 2010-04-12 | Visual Studio 2010 |
4.5 | 4.5.50709 | 2012-08-16 | Visual Studio 2012 RTM | Windows 8 Windows Server 2012

### .NET Framework 1.0

完整版本号 - 1.0.3705。这是最初的.NET构架，发行于2002年。它可以以一个独立且可重新分发的包的形式或在一个软件发展工具包集中被获得。它也是第一个微软Visual Studio .NET的发行版的一部分（也被称作Visual Studio .NET 2002）。

### .NET Framework 1.1

完整版本号 - 1.1.4322。这是首个主要的.Net Framework升级版本，发行于2003年。它可以以一个独立的可重新分发的包的形式或在一个软件发展工具包集中被获得。它也是第二个微软Visual Studio .NET版本的一部分（也被称作Visual Studio .NET 2003）。它也是首个被Windows操作系统-Windows Server 2003所内置的.Net Framework版本。
自1.0版本以来的改进：
自带了对mobile asp .net控件的支持。这在1.0版本是以附加功能方式实现的，现在已经集成到框架的内部。安全方面的变更 - 使得Windows窗体代码以可靠的行为运行，从而可以在Internet环境内安全运行，并且加入了ASP .NET应用程序的代码安全访问功能。自带了对ODBC和Oracle数据库的支持。这在1.0版本是以附加功能方式实现的，现在已经集成到框架的内部。.NET Compact Framework- 这是一个用于智能设备（例如Pocket PC或者SmartPhone）的.Net Framework的子集。对IPv6的支持。大量的API变更。[2]

### .NET Framework 2.0

完整版本号 - 2.0.50727.42，发行于2005年10月27日。
.Net Framework 2.0的组件都包含在 Visual Studio 2005和SQL Server 2005里面。通过MSDNUniverse版可以免费下载RTM版本。自1.1版本以来的改进：大量的API变更。新的API让需要管理.NET运行库实例的非.NET的应用程序可以做到这点。这个新的API对.NET运行库的各种功能，包括：多线程、存储器分配、代码加载等，提供了很好的控制。它最初是为Microsoft SQL Server能够有效率的使用.NET运行库而设计的，因为Microsoft SQL Server拥有它自己的日程管理器和存储器管理器。

### .NET Framework 3.0

此版本不支持 Windows 2000。
发行于2006年11月21日。曾用名“WinFX”。依然使用.Net Framework 2.0版本的公共语言运行库（CLR），并加入了适应未来软件发展方向的4个框架：
Windows Presentation Foundation（WPF）：提供更佳的用户体验，用来开发Windows Forms程序以及流览器应用程序.Windows Communication Foundation（WCF）：提供SOA（面向服务的软件构架）支持的安全的网络服务（Web Service）框架。Windows Workflow Foundation（WF）：提供一个设计与发展工作流程导向（Workflow-oriented）应用程序基础支持的应用程序接口。Windows CardSpace：提供一个SSO的解决方案，每个用户都有各自的CardSpace。

### .NET Framework 3.5

此版本不支持 Windows 2000。
这个版本将包含一个支持C#和VB .Net中心的语言特性的编译器，以及对语言集成查询（LINQ,Language-Integrated Query）的支持。该版本随Visual Studio 2008一起发布。
同时，.NET Framework 3.5自动包含 .NET Framework 2.0 SP1以及 .Net Framework 3.0 SP1，用于为这两个版本提供安全性修复，以及少量新增的类库（如System.DateTimeOffest）。此版本提供的新功能有：
扩展方法（Extension Method）属性（Attribute），用于为扩展方法提供支持LINQ支持，包括LINQ to Object、LINQ to ADO .NET以及LINQ to XML表达式目录树（Expression Tree），用于为Lambda表达式提供支持与语言集成查询 (LINQ)和数据感知紧密集成。借助这个新功能，您可以使用相同的语法，在任何支持LINQ的语言中编写相关代码，以筛选和枚举多种类型的SQL数据、集合、XML和数据集，以及创建它们的投影。利用asp .netAJAX可以创建更有效、更具交互性、高度个性化的Web体验，这些体验在所有最流行的浏览器上都能实现。用于生成WCF服务的全新Web协议支持，包括AJAX、JSON、REST、POX、RSS、ATOM和若干新的WS-*标准。Visual Studio 2008中面向WF、WCF和WPF的完整工具支持，其中包括支持工作流的服务这一新技术。.Net Framework 3.5基类库 (BCL)中的新类可满足许多常见的客户请求。
该版本新增的ASP .NET功能，随Visual Studio 2008 SP1发布，此版本提供了下列的新功能：
新增的ASP .NET功能包括ASP .NET动态数据和ASP .NET AJAX附加功能，前者提供了无需编写代码就可实现数据驱动的快速开发的丰富支架框架，后者为管理浏览器历史记录提供了支持（后退按钮支持）。ADO .NET Entity Framework。对SQL Server 2008的数据提供程序支持。.Net Framework客户端配置文档是完整版.Net Framework的子集，面向客户端应用程序。这改善了尚未安装.Net Framework的计算机上的安装体验。改进Windows Presentation Foundation的性能，其中包括启动速度的位图效果性能的提高。为Windows Presentation Foundation增加的功能包括对业务线应用程序的更好支持、本机闪屏支持、DirectX像素着色器支持以及新的WebBrowser控件。ClickOnce应用程序发布者可以根据具体情况决定是否取消签名和散列，开发人员可以以编程方式安装显示自定义署名的ClickOnce应用程序，ClickOnce错误对话框支持指向网络上特定于应用程序的支持站点的链接。用于SQL Server的.Net Framework数据提供程序 (System.Data.SqlClient)完全支持SQL Server 2008数据库引擎的所有新功能。有关.Net Framework对SQL Server 2008的支持的更多信息，请参见SQL Server中的新功能 (ADO .NET)。ADO .NET数据平台是一种多版本策略，它使开发人员能够针对概念性实体数据模型进行编程，从而减轻他们的编码和维护工作。此平台提供了ADO .NET Entity Framework、实体数据模型 (EDM)、对象服务、LINQ to Entities、Entity SQL、EntityClient、ADO .NET数据服务及实体数据模型工具。Windows Communication Foundation现在提供了改进的互操作性支持，增强了部分信任方案中的调试体验，并扩展了集成协议支持以更广泛地应用于Web 2.0应用程序，进而使DataContract串行化程序更易于使用。Microsoft.VisualBasic.PowerPacks命名空间引入了新的DataRepeater控件，该控件以可自定义的列表格式显示数据。此命名空间还包含新的矢量形状。

### .NET Framework 4.0

此版本不支持 Windows 2000。
.NET Framework 4.0主要增加了并行支持，于2010年4月12日推出。
企业基础 .NET提供开发软件的独立平台，自带高度安全的网络系统，相当倚重软件组件以及组件导向程序。在这方面它完全取代前者（COM1）。

### .NET Framework 4.5

此版本不支持 Windows 2000、Windows XP。[3]
.NET Framework 4.5 发行于2012年8月16日，是支持生成和运行下一代应用程序和 Web 服务的内部 Windows 组件。 .NET Framework 的关键组件为公共语言运行时 (CLR) 和 .NET Framework 类库（包括ADO .NET、ASP .NET、Windows 窗体和 Windows Presentation Foundation (WPF) 和 Windows Workflow Foundation (WF)）。 .NET Framework 提供了托管执行环境、简化的开发和部署以及与各种编程语言的集成。[4]
.NET for Windows Store apps：Windows Metro 风格 应用程序为特定窗体因素并利用 Windows 操作系统的功能。 通过使用 C# 或 Visual Basic，.NET Framework 4.5 的子集可用于生成 Windows 的 Metro 风格 应用程序。 这个子集称为 .NET for Windows Store apps
更新内容：
1.在部署期间，能够通过检测和关闭 .NET Framework 4 应用程序来减少系统重启。为大于20 GB 在 64 位平台上 (GB) 的数组支持。 此功能可在应用程序配置文件中启用。
2.通过服务器的背景垃圾回收改进性能。 当您使用服务器垃圾回收在 .NET Framework 4.5 中时，后台垃圾回收自动启用。
3.背景实时 (JIT) 生成，可以选择可用在多核处理器改进应用程序性能。
4.在它超时之前，能够限制正则表达式引擎要多久能尝试解决正则表达式。
5.能够定义应用程序域的默认区域性。
6.Unicode (UTF-16) 编码的控制台支持。
7.为版本控制区域性字符串排序和比较数据支持。
8.在检索资源时，请改进性能。 请参见 打包和部署桌面应用程序中的资源。
9.Zip 压缩改进可减少压缩文件的大小。
10.通过 CustomReflectionContext 类，能够自定义反射上下文来重写默认反射行为。
11.对于国际化域名的 2008 版在应用程序 (IDNA) 标准的支持，当 System.Globalization.IdnMapping 选件类在 Windows 8 使用时。
12.当 .NET Framework 在 Windows 8 使用时，到操作系统的字符串比较的委托实现 Unicode 6.0。 在其他平台上运行时，.NET Framework 包括其自己的实现 Unicode 5.x 的字符串比较数据。每个应用程序域的基础上能够计算字符串的哈希代码。

## 4 功能

### 第一点

ASP .NET动态数据，它提供了丰富的框架，从而使用户可以

NET Framework

快速进行数据驱动的开发，而无需编写代码；ASP .NET AJAX 的一项新增功能，对管理浏览器历史记录提供了支持（支持后退按钮）。

### 第二点

对公共语言运行时的核心改进包括：改进了.NET Framework本机映像的布局、选择不再对完全受信任的程序集进行强名称验证、提高了应用程序启动性能、改进了生成的代码以缩短端对端应用程序执行时间、选择在ASLR（地址空间布局随机化）模式下运行托管代码（如果操作系统支持）。此外，从网络共享打开的托管应用程序在完全受信任环境下运行时与本机 应用程序具有相同的行为。

### 第三点

提高了Windows Presentation Foundation的性能，包括缩短了启动时间，提高了与位图效果有关的性能。WPF的其他新增功能包括：改善了对业务线应用程序、本机初始屏幕、 DirectX 像素着色器的支持，并且新增了WebBrowser控件。

### 第四点

ClickOnce应用程序发行者可以决定在适当情况下不进行签名和加密，开发人员可以编程方式安装ClickOnce应用程序以显示自定义署名，并且ClickOnce错误对话框支持链接到Web上应用程序特定的支持网站。

### 第五点

实体框架是从现有的一套ADO.N ET数据访问技术发展而来的。利用

NET Framework

实体框架，开发人员可以按照应用程序特定的域模型（而不是基础数据库模型）来针对关系数据库进行编程。有关更多信息，请参见实体框架入门。实体框架还引入了一些其他功能，包括支持SQL Server 2008的新类型、默认实体图形序列化和实体数据源。在此版本中，实体框架支持SQL Server 2008中的新日期和文件流功能。图形序列化工作可帮助开发人员生成将全部图形建模为数据协定的Windows Communication Foundation (WCF)服务。实体数据源为希望使用实体框架的ASP .NET应用程序构建者提供了传统的数据源体验。

### 第六点

LINQ to SQL新增了对SQL Server2008中的新日期和文件流功能的支持。

### 第七点

ADO. NET Data Services Framework由满足以下条件的模式和库组合而成：支持将数据公开为一项基于REST（具象状态传输）的灵活数据服务，企业网络内部或整个互联网上的Web客户端都可以使用该服务。ADO.N ET Data Services Framework支持基于任何数据源创建数据服务。通过与 ADO .NET Entity Framework 的充分集成，可以轻松公开基础存储架构的概念视图模型。可以轻松地从任一平台访问使用ADO .NET Data Services Framework创建的服务以及兼容的Windows Live (dev.live .com)服务。针对运行在微软平台上的客户端应用程序提供了一组客户端库，以简化与数据服务的交互。例如，基于.NET Framework的客户端可以使用LINQ查询数据服务，也可以使用简单的.NET Framework对象层更新此服务中的数据。

### 第八点

现在，Windows Communication Foundation改进了对互操作性的支持，增强了部分受信任情况下的调试体验，并且扩展了整合协议支持以便在Web 2.0应用程序中可以进行更广泛的应用，从而使Data Contract序列化程序变得更易于使用。

### 第九点

用于SQL Server(Sql Client) 的.NET Framework数据提供程序新增了对SQL Server 2008中的文件流和稀疏列功能的支持。

## 5 特色

### 软件环境

在软件环境中，应用程序的来源很多，它们执行很多任务。对应用程序代码的信任是一个主要需求，因为谁也不想软件或信息遭到破坏。给予许可的安全策略不会允许对敏感信息的不适当的访问，或将本地机器暴露给恶意的程序或甚至是有平常错误的代码。

### 安全结构

安全结构提供了基于用户帐号的隔离和访问控制--在这些限制内给予代码完全访问权，并假定由特定用户可运行的代码具有相同的信任度。不幸的是，如果所有程序都代表某用户运行，根据用户对代码的隔离对于保护一个程序不被其它用户使用是不够的。另一种情况，不能被完全信任的代码经常被转移到沙箱模型中执行，在此代码运行于隔离环境，而不会访问大部分的服务。
应用程序的成功的安全解决方案必须能强化两个安全模型间的平衡。它必须提供对资源的访问，以便以完成有用的工作，它需要对应用程序的安全性作细致的控制以确保代码被识别，检测，并给予合适的安全级别。.NET Framework就提供了一个这样的安全模型。
NET Framework 第一个SP服务包的最终版.这是一个累积更新，包含很多基于.NET Framework 不断生成的新功能，此外还包括.NET Framework SP2和.NET Framework SP2累积更新，支持x86、x64、IA64三种架构。.NET Framework SP1集成了此前发布的三十个相关Hotfix热修复补丁，同时还引入了不少新特性和改进：
NET Framework安全迎合了这种事实：软件向多样化的移动组件发发展，并根据这种事实提供保护。在一个细化的、可扩展的策略和许可系统下，用户能够运行功能强大的代码，而同时减少相关的风险。在没有运行时对用户作出信任决定时，管理员可以在各个级别创建强壮的安全策略。策略是完全可定置的。开发人员能够集中解决应用程序逻辑，而不用关心核心的安全问题（它由CLR透明地处理）。然而，开发人员可以在任何时候扩展安全模型。

## 6 安全方案

### 安全规则

.NET Framework安全解决方案基于管理代码的概念，以及由通用语言运行时（CLR）加强的安全规则。大部分管理代码需要进行验证以确保类型安全及预先定义好的其它属性的行为的安全。例如，在验证的代码中，声明为接收4字节值的访问将拒绝提供8字节参数的调用，因为不是类型安全的。验证过程还确保了执行流只传送到已知的位置，如方法入口点--这个过程去除了跳转到任意位置执行的能力。

### 编程错误

验证将阻止不是类型安全的代码执行，在它们引起破坏前捕获很多常见的编程错误。通常的弱点--如缓存溢出，对任意内存或没有初始化的内存的读取，对控件的随意传送--都不再可能出现。这将使最终用户受益，因为在他们执行代码前对其进行检查。这也有益于开发人员，他们会发现很多常见错误（过去一直在困绕前开发）现在可以查明，并能阻止它们引起破坏。

### 受益的安全措施

CLR也能使非管理代码运行，但非管理代码不能从这些安全措施中受益。特殊的许可与对非管理代码的调用能力相关，一个强大的安全策略能确保这些许可被恰当地给予。经过很长时间后，非管理代码到管理代码的移植将减少对非管理代码的调用频率。

## 7 认证授权

### 认证过程

认证是一个过程，它接收来自用户的证书，并对证书的授权进行确认。如果证书是有效的，那么用户就可以说他拥有已认证的身份。而授权的过程是：确定认证用户是否能够访问给定的资源。

### 可通过的认证

认证可通过系统或企业逻辑来完成，通过某个API它是或获得的。认证API是完全可扩展的，因此开发人员根据需要使用自己的企业逻辑。开发人员可以对他们的认证需求进行编码，也可以修改底层的认证方法而无需对他们的代码作太大变化。除了微软Windows操作系统身份认证外，还有的认证方法包括基本HTTP，摘要和 Kerberos，以及微软Passport和基于窗体的认证。这些认证方法已经完全集成到AS P.N ET中了。

### 提供证书

在ASP. NET窗体认证中，用户提供证书，并提交窗体。如果应用程序

NET Framework

簦别请求，系统发送一个cookie ，该cookie以某种形式包含包含了证书或包含重新获得身份的关键字。接下来发送的请求在头中包含了cookie，ASP. NET处理程序通过应用程序所期望的任何有效方法对这些请求认证和授权。如果请求没有经过认证，HTTP客户端将用于把请求发送到认证窗体，在那里用户可能提供信任证书。窗体认证有时用于个性化--为已知用户的内容进行定置。在一些情况下，身份是问题所在而不是认证，因此用户的个性化信息可以简单地通过访问用户或获得。

### 授权目的

授权的目的是确定作出请求的身份是否被给予了对给定资源的访问权。ASP. NET提供了两种类型的授权服务：文件授权和URL授权。文件授权根据正在作用的方法和作出请求的身份决定用户使用于哪个访问控制列表。URL授权是URI名称空间和不同用户或角色间的逻辑映射。

## 8 隔离存储

.NET Framework提供了一个特殊的功能，隔离存储，用于存储数据，

NET Framework

甚至是当不允许对文件进行访问时--例如，当从Internet下载了一个管理控件，并运行它，为它提供了有限的许可权但没有权力读写文件。
隔离存储是一组新的用于.NET支持的用于本地存储的类型和方法。在本质上，每个组合可以访问磁盘上一断被隔离的存储空间。它不允许访问其它数据，隔离存储只对为它创建的组合有效。
隔离存储也可被应用程序用于保存活动记录，保存设置，或者将状态数据保存到磁盘上以备将来之用。因为隔离存储的位置是预先决定好的，所以隔离存储为指定唯一存储空间提供了一种方便的方式，而不需要决定文件路径。
从本地企业局域网获得的代码具有相似的限制，但更少，它可以访问大限额的隔离存储。最后，从受限站点区域（不信任站点）来的代码没有对隔离存储的访问权。

### 基完善目录于证据的安全

.NET Framework引入了基于证据的安全的概念。在本质上，它是对安全策略暴露出来问题的解答：
组合从哪个站点获得？
组合是.NET Framework应用程序的构件。它们组成了部署，版本控

NET Framework

制，重用，激活作用域，安全认证的基本单元。应用程序的组合是从网站上下载到客户端的。
组合是从哪个URL获得的？
安全策略需要明确的地址，而组合是从这个地址下载的。
组合是从哪个区获得的？
区是基于代码的位置，对安全标准，如 Internet， intranet和本机等等，的描述。
组合的强名(strong name）是什么？
强名是由组合的创建者提供了密码强化后的标识符。尽管它没有提供对创建者的任何证明，但它唯一标识了组合，确保了组合没有被破坏过。
根据对这些问题的回答，及其它证据，安全策略可以对赋予组合垢合适许可进行计算。从多种来源可以得到证据，包括CLR，浏览器，微软ASP. NET，及外壳--这依赖于代码的来源。
策略驱动的信任模型使用代码证据
当组合被调入内存进，CLR策略系统通过收集组合的证据并在策略环境中对证据进行计算，从而决定赋予组合什么样的许可权。CLR策略系统然后根据评估过的证据和组合作出的许可请求给予组合一组许可。只有在组合被给予了一组最少的许可后，或组合根本不需要许可权，组合的创建者才能知道组合正确运行。通过一个或多个对特定许可的请求，这样的附加需求可以被传送室策略系统。
根据许可请求的类型，策略系统可以进一步限制给予组合的许可（删除不必要的许可）或甚至拒绝将组合装入内存（如果运行组合所需的最小许可没有被策略给予）。在不存在任何许可请求的情况下，组合永远不会被给予多于策略系统将会给予的许可权限，请求只是进一步限制得到的许可。
安全策略包含了许多代码组，这些组包含了根据证据应给予的许可权。代码组描述的许可可提供给从特定的安全区域获得的组合，或提供给由特定发行商签名过的组合，等等。尽管随CLR发行了一组默认的代码组（及相关许可），但管理员可以对这些CLR安全的进行定置，以适合他们的特殊需求。记住，通过定义与证据相关的代码组，任何东西都可以作为证据提交，只要安全策略可以使用它。
创建许可的的过程涉及到对证据的评估，以确定代码组适用于哪个等级：企业，机器，和用户。策略按上面顺序对这三个等级进行评估，然后创建交插了三个等级的许可设置。管理员可以将任何一个策略等级标记为终结（final），这样做应付阻止在其它等级上对策略做进一步评估。例如，管理员可以在机器级别上对组合终止策略，这样就会阻止用户级策略对该组合的应用。
一旦策略完成，许可的最初设置也就创建了。组合通过从三个方面做出特定的请求可以优化这些许可：
第一方面是指定为了使组合运行它必须拥有的最小许可设置。如果这些许可没有给予，那么组合将不同调入到内存，并抛出例外。
第二，可以指定一组可选的许可。尽管组合希望存在这些许可，但如果无法获得这些许可，它仍可以调入到内存。
最后，行为特别好的组合实际上会拒绝它们所不需的有风险的许可。这三个优化选项是调入时作为声明语句实现的。
在运行时，许可是根据代码的执行计算的。右侧的图总结了这个过程的发生顺序。组合A3将它的证据和来自主机的证据提供给策略评估器。策略评估器在创建许可时也要考虑从组合得到的许可请求，G3。组合A3由组合A2调用，而A2又是由组合A1调用的。当组合A3执行一个引发安全检查的操作时，A2和A1获得的许可同样也要进行检查，以确保它们拥有A3所请求的许可权限。在这个过程中，此过程称为堆栈遍历（walking），堆栈中每个组合的许可权限都要进行检查以确定所给予的权限设置是否包含安全检查所需要的许可。如果堆栈中的每个组合被给予了安全检查所需要的许可，调用将成功。如何任何组合没有给予所需要的许可，堆栈遍历过程失败，安全例外将被抛出。
主机和组合为策略评估器提供证据，评估器使用安全策略和许可请求确定组合的许可权限。应用程序中不同运行组件的许可权限然后用于作出授权决定。
代码访问安全堆栈遍历可以保护代码不受攻击。在精通的攻击中，恶意代码欺骗受信任代码执行它独自不能运行的操作--有效地利用代码的许可权限实现恶意的目的。对这类攻击，开发人员很难进行防备--但堆栈遍历确保了如果涉及到了低级信任等级的代码，有效许可将被减少到信任等级最低的代码具有的许可。
结果，代码将从源处获得不同的信任等级，并在适合于特定的代码执行环境的限制下运行。
一些活动，如读写文件，显示对话框，读写环境变量，可以通过包含在框架安全构架中的.NET Framework方法实现。这就使.NET Framework能根据安全策略允许或不允许一个操作，而不需要程序员做额外的工作。尽管暴露了保护资源的管理类的创建者在他们的库中做了明确的安全需求，使用.NET Framework类库访问受保护资源的开发人员可以自由地利用代码访问安全系统；他们不必作出明确的安全调用。
管理员可以通过决定给予哪些许可来优化安全策略，然后，依靠.NET Framework处理所有的安全操作。代码访问安全能阻止大部分的恶意攻击，对代码的验证减少了缓存溢出和其它会导致安全攻击的不期望的行为。因此，应用程序和组件生来就受到了保护，它们免于大多数安全问题的冲击，而这些安全问题一直困绕着本地代码的实现。

### 基于角色的安全

有时根据已认证的身份或根据与代码执行上下文相关的角色作出认证决定是合适的。比如，金融和企业软件可以通过评估角色信息的企业逻辑加强策略。根据作出请求的用户角色可以对金融交易的数据进行限制。出纳被允许可以处理一定金额的请求，而多于该金额的所有工作需要监督人的角色来处理。
身份可以映射到登录系统的用户，或由应用程序定义。相应的原则封装了身份和其它相关的角色信息。
.NET Framework提供了一组加密对象，它们支持加密算法、数字签名、散列、生成随机数，是通过众所周知的运算法则实现的，如RSA， DSA， Rijndael/AES， Triple DES， DES， 和 RC2， 以及MD5， SHA1， SHA-256， SHA-384 和 SHA-512散列算法。同时还支持在IETF和W3C开发的XML数字签名规范。.NET Framework使用加密对象支持内部服务。这些对象还作为管理代码提供给需要加密支持的开发人员。
指定安全性，如果要对组合运行时的行为进行修改，根据程序员的需要，可以作出声明式安全或强迫式安全的修改。

### 声明式安全

声明式安全使程序员可以直接在组合代码的元数据中为组合指定安全需求。许可请求和所有其它形式的声明式安全是在代码中是作为定置属性指定的。类，属性和方法的注释用于优化许可。例如，声明式安全可用于类的调用者在调用方法前检查调用者是否被已知地行商签名过，或有一个特定的强名。
由于声明属性是组合元数据的一部分，所以组合的安全需求易于辨别。可以使用工具对组合进行扫描，以发现哪些方法需要某些许可，哪些方法断言了某些许可。
当被请求的活动和许可在编译时是知道时，声明式检查可作为选择的解决方案之一。例如，如果方法总是检查对C:temp的写访问许可，那么许可检查就会从声明中得到好处。另一方面，如果被请求的具有访问权的位置发生了变化，那么强迫式安全也许是一个比较好的解决方案。

### 强迫式安全

强迫式安全直接在代码中实现。程序员通过程序采取安全活动，并且根据安全堆栈的状态决定是给予还是拒绝许可。例如，当一个方法请求访问一个特定的文件时，如果调用者（或方法的任何一个调用者）没有被给予必需的许可权限，那么请求失败。因为强迫式安全是通过程序实现的，所以满足了动态需求。如果需要对一个特定文件的访问许可，但该许可还要根据其它信息发生变化，那么，强迫式安全就是可选的解决方案。[5]
词条图册更多图册

参考资料

  - 1． .NET Framework Conceptual Overview ．MSDN [引用日期2012-06-21] ．

  - 2． Framework 官方安装版 ．天空软件下载 [引用日期2012-12-19] ．

  - 3． .NET Framework4.5 系统要求 ．微软msdn [引用日期2013-01-25] ．

  - 4． .NET Framework 4.5 ．微软官网 MSDN [引用日期2012-08-16] ．

  - 5． Microsoft .NET Framework v3.5 简体中文版 ．游基地 [引用日期2012-07-10] ．

相关文献
  - 基于.NET Framework和Direct3D技术实现危险性液体储罐泄漏过程的三维仿真-中国安全生产科学技术-2011年 第1期 (7)
  - 大型仪器设备共享及预约系统设计与实现-电子设计工程-2011年 第11期 (19)
  - 基于虚拟网络实验系统的实验在线保存技术-计算机与现代化-2011年 第6期

  >> 查看更多相关文献

词条标签：
  Microsoft 软件开发软件系统 系统组件

如果想投诉，请到百度百科投诉中心；如果想提出意见、建议，请到意见反馈。