Microsoft Corporation
在本节中
一个功能强大的 ASP.NET 应用程序依赖于许多元素及技术的成功的相互作用。每一个解决方案的组成部分都会提供安全性功能,这些功能被设计用来满足自身需要。然而,只是从单一的一个组成部分的角度来看待安全性是不够的。为了为整体的解决方案提供安全性,必须也要考虑各个组成部分是如何相互作用的。
本节介绍了 .NET Web 应用程序体系结构和安全性,并且提供了一个可供参考的框架,而在此系列中其它的章节会向此框架中补充其它内容。本节综述了存在于一个典型的 .NET Web 应用程序各个层面的安全性特征和服务。也介绍了 .NET Framework 安全性, 并且解释了在此框架中的哪些元素对 ASP.NET Web应用程序开发人员最为重要。
目标
本章用来:
•
深刻理解 .NET Web 应用程序体系结构和逻辑上以及物理上的应用程序层概念。
•
了解每个实现技术提供的哪些安全性特征可以用来构建 .NET Web 应用程序,以及它们如何一起工作。
•
理解 .NET Framework 安全性功能,并且理解哪些元素对 Web 应用程序安全性最为重要。
•
比较和对照 Web 应用程序中可以使用的授权和验证机制。
•
了解如何在 .NET Web 应用程序中使用主体和标识对象。
•
确定可在应用程序中用于实现信任边界的网关守卫和关口。
适用于:
本章应用于下面的产品和技术:
•
Microsoft_ Windows_ XP 或者 Windows 2000 Server 及其以后的的操作系统
•
Internet Information Services (IIS)
•
.NET Framework 1.0 版本及其以后的版本
如何使用本节
为了从本章得到更多的收获:
•
您必须具有 ASP.NET Web 应用程序的开发经验。这将有助于您理解在本单元中讨论的各种安全性元素在何处与您的应用程序相结合。
•
阅读“构建安全的 ASP.NET 应用程序简介”,此文强调了授权、验证以及安全通信在创建安全的、分布式的Web应用程序中的重要性。同时指出了在开发安全的Web应用程序时采用的主要原则和实践。
本页内容
.NET Web 应用程序
实现技术
安全体系结构
介绍 .NET Framework 安全性
小结
.NET Web 应用程序
这一部分对 .NET Web 应用程序进行了简要的介绍,并且分别从逻辑上和物理上说明其特征。还介绍了用于构建 .NET Web 应用程序的各种实现技术。
逻辑层
逻辑应用程序体系结构将任何系统都视为一组相互协作的服务,这些服务分为以下几层:
•
用户服务
•
业务服务
•
数据服务
此逻辑体系结构视图的意义的价值在于将普遍存在于任何系统中的各种服务区分开来、确保了适当的分离以及促成各层之间的接口定义。这种分离可以使您在实现每个逻辑层时更为谨慎地进行体系结构和设计选择,从而构建出更易于维护的应用程序。
现将各逻辑辑层描述如下:
•
用户服务负责客户端与系统之间的交互,并且提供一个与核心业务逻辑相连的公共网桥,这些业务逻辑由业务服务层内的组件封装。一般说来,用户服务与交互式用户关联的情况最多。不过,它们也对其他系统发出的编程请求进行初始处理,这种情况下不涉及任何可见的用户界面。身份验证和授权的确切性质因客户端类型而异,它们通常在用户服务层内执行。
•
业务层提供系统的核心功能并封装业务逻辑。它们独立于传输信道和后端系统或数据源。这就为提升系统以支持新的、不同的信道及后端系统提供了必要的稳定性和灵活性。通常,为特定业务请求提供服务涉及到业务服务层内的许多协作组件。
•
数据服务通过一般接口提供对数据(系统边界内承载的)及其他(后端)系统的访问;通过业务服务层内的组件可以方便地使用这些接口。数据服务对多种后端系统和数据源进行了抽象,并且封装了特定的访问规则和数据格式。
系统内各服务类型的逻辑分类既与实现这些服务的组件的可能的物理分布相关,又相对独立于它们的物理分布。
可以在任何聚合级别上标识逻辑层,具体来说,可以对整个系统(在系统环境上下文和外部交互中)标识逻辑层,也可以对系统中所含的任何子系统标识逻辑层。记住这一点也很重要。例如,承载 Web 服务的每个远程节点由用户服务(处理传入的请求和消息)、业务服务和数据服务组成。
物理部署模型
前面所述的三个逻辑服务层并不意味着存在特定数量的物理层。所有这三种逻辑服务在物理上可能位于同一台计算机上,也可能分布于多台计算机上。
Web 服务器用作应用程序服务器
.NET Web应用程序的常用部署模式是将业务和数据访问组件放在 Web 服务器上。这样就最大限度地减少了网络跃点,有助于提高性能。图 1 中显示了这种模型。.
图 1. Web 服务器用作应用程序服务器
远程应用程序层
远程应用程序层是常用的部署模式,尤其是以下 Internet 方案中的常用部署模式:Web 层在周边网络(也就是大家所知道的DMZ 和屏蔽的子网)中是独立的部分,它依靠数据包筛选防火墙与最终用户和远程应用程序层分隔开图 2 中显示了远程应用程序层。
图 2. 远程应用程序层简介
实现技术
.NET Web 应用程序通常使用以下技术来实现一个或多个逻辑服务:
•
ASP.NET
ASP.NET 通常用于实现用户服务。ASP.NET 提供一种可插接式体系结构,这种体系结构可用于构建 Web 页。有关 ASP.NET 安全性,的详细信息,请参阅:“ASP.NET 安全性”。
•
企业服务
Enterprise Services 为应用程序提供基础结构级别的服务。这包括分布式事务和资源管理服务,如 .NET 组件的对象池。有关Enterprise Services 的详细信息,请参阅“企业服务安全性”。
•
Web 服务
Web 服务使用基于 SOAP 的消息交换来防火墙移动数据和在异构系统之间移动数据,以此来实现数据交换和应用程序逻辑的远程调用。有关 Web 服务的详细信息,请参阅“Web 服务安全性”。
•
.NET Remoting
.NET Remoting 提供了一种用于跨越进程和计算机边界访问分布式对象的框架。有关.NET Remoting的详细信息,请参阅“NET Remoting 安全性”。
•
ADO.NET 和 Microsoft_ SQL Server™ 2000
ADO.NET 提供数据访问服务。 ADO.NET从一开始就是专门为分布式 Web 应用程序设计的,很适合用于与 Web 应用程序有着内在联系的分离方案。SQL Server 提供使用操作系统身份验证机制(Kerberos 或 NTLM)的集成式安全性。授权由可应用于单个数据库对象的登录和细化权限提供。有关数据访问安全性的详细讨论,请参阅“数据访问安全性”。
•
Internet 协议安全性 (IPSec)
IPSec提供点对点的传输级别加密和身份验证服务。有关 IPSec 的详细信息,请参阅“安全通信”。
•
安全套接字层 (SSL)
SSL提供点对点的安全通信信道。通过该信道传输的数据都是加密的。有关 SSL 的详细信息,请参阅“安全通信”。
安全体系结构
图 3显示了远程应用程序层模型和前面介绍的各种技术提供的那些安全服务。身份验证和授权在分布于各层中许多点分别进行。这些服务主要由 Internet 信息服务 (IIS)、ASP.NET、Enterprise Services 和 SQL Server 提供。同时,安全通信信道在各层上应用,并从客户端浏览器或设备一直延伸到数据库。信道的安全性由安全套接字层 (SSL) 或 IPSec 联合提供保障。
图 3. 安全体系结构
各层之间的安全性
表 1摘要说明前面讨论的技术所提供的身份验证、授权和安全通信功能。
表 1:安全功能
技术
身份验证
授权
安全通信
IIS
匿名
基本
摘要式
Windows 集成 (Kerberos/NTLM)
证书
IP/DNS 地址限制
Web 权限
NTFS 权限;所请求文件的 Windows
访问控制列表 (ACL)
SSL
ASP.NET
无(自定义)
Windows
窗体
Passport
文件授权
URL 授权
主体权限
.NET角色
-
Web Services
Windows
无(自定义)
消息级别身份验证
文件授权
URL 授权
主体权限
.NET角色
SSL 和消息级别加密
Remoting
Windows
文件授权
URL 授权
主体权限
.NET角色
SSL 和消息级别加密
Enterprise Services
Windows
Enterprise Services (COM+)角色
NTFS权限
远程过程调用 (RPC) 加密
SQL Server 2000
Windows (Kerberos/NTLM)
SQL 身份验证
服务器登录
数据库登录
固定数据库角色
用户定义的角色
应用程序角色
对象权限
SSL
Windows 2000
Kerberos
NTLM
Windows ACLs
IPSec
身份验证
Windows 2000上的.NET Framework提供下面的身份验证选项:
•
ASP.NET身份验证模式
•
Enterprise Services身份验证
•
SQL Server 身份验证
ASP.NET 身份验证模式
ASP.NET身份验证模式包括 Windows、窗体、Passport和无身份验证。
•
Windows 身份验证。在这种身份验证模式下,ASP.NET 依靠 IIS 对用户进行身份验证并创建 Windows 访问令牌来表示经过身份验证的标识。IIIS 提供下列身份验证机制:
•
基本身份验证。基本身份验证要求用户以用户名和密码的形式提供证书以证明其标识。它是基于 RFC 2617提出的 Internet 标准。http://www.faqs.org/rfcs/rfc2617.html. Netscape Navigator 和 Microsoft Internet Explorer 都支持基本身份验证。用户证书以不加密的 Base64 编码格式从浏览器传送到 Web 服务器。由于 Web 服务器得到的用户证书是不加密的格式,因此 Web 服务器可以使用用户证书发出远程调用(例如,访问远程计算机和资源)。
注 基本身份验证只应与安全信道(通常是使用 SSL 建立的)一起使用。否则,用户名和密码很容易被网络监视软件窃取。如果使用基本身份验证,应在所有页(而不仅仅是登录页)上使用 SSL,因为在发出所有后续请求时都传递证书。有关联合使用基本身份验证和 SSL 的详细信息,详见“ASP.NET 安全性”。
•
摘要式身份验证。与 IIS 5.0 一起推出的摘要式身份验证与基本身份验证类似,但它从浏览器向 Web 服务器传送用户证书时不采用不加密的格式,而采用哈希格式。 因此,它更为安全,不过它要求使用 Internet Explorer 5.0 或更高版本的客户端以及特定的服务器配置。
•
集成的 Windows 身份验证。集成的 Windows 身份验证(Kerberos 或 NTLM,具体取决于客户端和服务器配置)使用与用户 Internet Explorer Web 浏览器的加密交换来确认用户标识。只有 Internet Explorer 支持这种验证(Netscape Navigator 不支持)。所以,这种验证一般只能在 Intranet 方案中使用,因为您能够控制 Intranet 中所用的客户端软件。如果禁用匿名访问,或拒绝通过 Windows 文件系统权限进行匿名访问,那么这种验证只能由 Web 服务器使用。
•
证书身份验证。证书身份验证使用客户端证书明确地识别用户。客户端证书由用户的浏览器(或客户端应用程序)传递到 Web 服务器。(如果是 Web 服务,则由 Web 服务客户端通过 HttpWebRequest 对象的ClientCertificates 属性来传递证书。)Web 服务器从证书中提取用户标识。该方法依赖用户计算机上安装的客户端证书,所以它一般在 Intranet 或 Extranet 方案中使用,因为您熟悉并能控制 Intranet 和 Extranet 中的用户群。IIS 在收到客户端证书后,可以将证书映射到 Windows 帐户。
•
匿名身份验证。如果不需要对客户端进行身份验证(或者您实现自定义的身份验证方案),则可以配置 IIS 进行匿名身份验证。在这种情况下,Web 服务器创建 Windows 访问令牌来表示使用同一个匿名(或来宾)帐户的所有匿名用户。默认匿名帐户是 IUSR_MACHINENAME,其中 MACHINENAME 是在安装时为计算机指定的 NetBIOS 名称。
•
Passport 身份验证。在这种身份验证模式下,ASP.NET使用 Microsoft Passport 的集中式身份验证服务。ASP.NET提供方便的包装对 Microsoft Passport 软件开发工具包 (SDK) 提供的功能进行包装,该 SDK 必须安装在 Web 服务器上。
•
窗体身份验证。此方法使用客户端重定向将没有经过身份验证的用户转发到指定的 HTML 窗体,用户可以在该窗体中输入证书(通常是用户名和密码)。然后,系统对这些证书进行验证,生成身份验证票并将其返回客户端。身份验证票上有用户标识,您还可以选择在身份验证票上列出用户在会话期间所属的角色。
有时,窗体身份验证仅用于 Web 站点的个性化处理。在这种情况下,您几乎不用编写任何自定义代码,因为 ASP.NET用简单的配置自动处理这一过程的大部分工作。在个性化处理方案中,cookie 只需要保留用户名。
注:窗体身份验证以明文形式向 Web 服务器发送用户名和密码。因此,应该将窗体身份验证与 SSL 保护的信道结合使用。为了对后续请求中传输的身份验证 cookie 不间断地提供保护,您应该考虑在应用程序内的所有页上使用 SSL,而不仅仅是在登录页上使用 SSL。
•
无“无”表示不希望对用户进行身份验证,或者使用的是自定义的身份验证协议。
更多信息
有关ASP.NET身份验证的更多详细信息,请参阅“ASP.NET 安全性”。
企业服务身份验证
企业服务身份验证的通过基础的“远程过程调用”(RPC) 传输基础结构来执行的,该基础结构使用操作系统的“安全服务提供程序接口”(SSPI)。可以使用 Kerberos 或 NTLM 身份验证对企业服务应用程序客户端进行身份验证。
可以在库应用程序或服务器应用程序中承载服务组件。库应用程序是 [1] [2] [3] 下一页 [C语言系列]NET 中C#的switch语句的语法 [系统软件]托拽Explore中的文件到VB.net的窗口 [系统软件]Boost库在XP+Visual C++.net中的安装 [常用软件]新配色面板:Paint.Net3.0RC1官方下载 [常用软件]用内建的“Net Meeting”聊天 [VB.NET程序]Henry的VB.NET之旅(三)—共享成员 [VB.NET程序]Henry的VB.NET之旅(二)—构造与析构 [VB.NET程序]Henry的VB.NET之旅(一)—失踪的窗体 [VB.NET程序]在托盘上显示Balloon Tooltip(VB.NET) [VB.NET程序]Henry手记-VB.NET中动态加载Treeview节点(二)
|