构建安全的 ASP.NET 应用程序
路线图
总目录 |
身份验证、授权和安全通信
J.D. Meier、Alex Mackman、Michael Dunner 和 Srinath Vasireddy
Microsoft Corporation
2002 年 10 月
概览
本节概要介绍本指南各章节的大致内容和范围。
本章着重说明了本指南的目标,介绍了关键术语并且提出了后面章节指导所遵循的中心原则。
本章从安全角度介绍了 .NET Web 应用程序的共同特征,并介绍了 .NET Web 应用程序安全模型,还介绍了在构建安全的 .NET Web 应用程序时将要用到的核心实施技术。
同时,本章还介绍了可用于开发纵深防御安全策略的各种网关守卫程序,解释了使用主体对象和标识对象进行基于主体的授权的概念。
本章将帮助您解答以下问题:
- .NET Web 应用程序通常采用什么样的部署模式?
- 用于构建 .NET Web 应用程序的各种技术提供了哪些安全功能?
- 我该了解哪些网关守卫?如何使用它们提供纵深防御安全策略?
- 什么是主体对象和标识对象?为什么它们非常重要?
- .NET 安全性与 Windows 安全性之间存在什么样的关系?
设计一种跨应用程序多层的一致的身份验证和授权策略是一项很关键的任务。本章提供有关的指导,以帮助您为特定的应用程序方案开发合适的策略,还将帮助您选择最适合的身份验证和授权技术,并以正确的方式应用于您的应用程序。
阅读本章可以了解到如何执行以下任务:
- 选择适当的身份验证机制识别用户。
- 开发有效的授权策略。
- 选择适当的基于角色的安全类型。
- 比较和对比 .NET 角色与 Enterprise Services (COM+) 角色。
- 使用数据库角色。
- 在受信任的子系统资源访问模型与模拟/委派模型之间做出选择,后者用于在操作系统级别让原调用方安全上下文通过应用程序的多个层。
图 1 和图 2 显示这两个核心资源访问模型。
图 1 受信任的子系统模型
在受信任的子系统模型中:
- 使用固定的受信任 标识和安全上下文执行下游资源访问。
- 下游资源管理器(例如,数据库)委托上游应用程序对调用方进行适当的身份验证和授权。
- 资源管理器向应用程序授予资源访问权限。原调用方没有资源管理器的直接访问权限。
- 下游与上游组件之间存在信任界线。
- 原调用方标识(用于审核)在应用程序(而非操作系统)级别传递。
图 2 模拟/委派模型
在模拟/委派模型中:
- 使用原调用方的安全上下文执行下游资源访问。
- 下游资源管理器(例如,数据库)向各个调用方授权。
- 原调用方标识在操作系统级别传递,可供进行平台级别审核和进行按调用方授权使用。
- 使用固定的受信任 标识和安全上下文执行下游资源访问。
第 4 章 — 安全通信
本章介绍了两项核心技术,它们能在 Internet 和公司 Intranet 上,为客户端和服务器间的网络数据流提供消息机密性和消息完整性保障,这就是 SSL 和 IPSec。本章还讨论了 RPC 加密技术,这种技术可用来保障与远程服务组件通信的安全。
阅读本章可以了解到如何执行以下任务:
- 第 1 章 — 简介
- 第 2 章 — .NET Web 应用程序安全模型
- 第 3 章 — 身份验证和授权
- 在应用程序的各层上应用安全通信技术。
- 在 SSL 和 IPSec 之间选择。
- 配置安全通信。
- 使用 RPC 加密。
本章讲解在应用程序的各物理层之间提供安全通信信道的需要,如图 3 所示。
图3 能够安全通信的典型 Web 部署模型第 5 章 — Intranet
本章介绍一组常用的 Intranet 应用程序方案,并针对每种方案介绍了推荐的安全配置。同时,本章还介绍了构建每种安全解决方案所需的配置步骤,对每种方案的分析,以及其他相关但具体情况不同的方案。
本章介绍的应用程序方案如下:- ASP.NET 到 SQL Server .图 4 中显示了此方案。
- ASP.NET 到 Enterprise Services 到 SQL Server
- ASP.NET 到 Web 服务到 SQL Server
- ASP.NET 到 Remoting 到 SQL Server
- 将原调用方传递到数据库.它包括多层 Kerberos 委派方案,如图 5 所示。
图4 ASP.NET 到远程 SQL Server 方案的安全配置
图5 ASP.NET 到远程 Enterprise Services 到远程 SQL Server Kerberos 委派方案的安全配置
阅读本章可以了解到如何执行以下任务:
- 使用本地 ASPNET 帐户从 ASP.NET Web 应用程序调用远程 SQL Server 数据库。
- 使用 Windows 身份验证与 SQL Server 之间建立受信任的数据库连接。
- 使用 SQL Server 用户定义的数据库角色授予数据库访问权限。
- 避免在应用程序中存储凭据。
- 使用 SSL 和 IPSec 的组合保护机密数据。
- 实施 Kerberos 委派,以便将原调用方的安全上下文通过应用程序的多个层传递到后端数据库。
- 使用基本身份验证传递原调用方的安全上下文。
- 联合使用 ASP.NET 文件授权、URL 授权、.NET 角色和 Enterprise Services (COM+) 角色向用户授权。
- 在 ASP.NET Web 应用程序中有效地使用模拟。
第 6 章 — Extranet
本章介绍一组常用的 Extranet 应用程序方案,并针对每种方案提供了推荐的安全配置、配置步骤及分析。
本章介绍的 Extranet 方案如下:- 公开 Web 服务(B2B 合作伙伴交换)
图 6 中显示了此方案。 - 公开Web 应用程序(合作伙伴应用程序门户)
图 6 Web 服务 B2B 合作伙伴交换方案的安全配置
阅读本章可以了解到如何执行以下任务:
- 对照专用的 Extranet Active Directory 使用客户端证书身份验证,以此验证合作伙伴公司的身份。
- 将证书映射到 Windows 帐户。
- 使用 ASP.NET 文件授权和 .NET 角色向合作伙伴公司授权。
- 使用 ASPNET 标识访问位于公司 Intranet 上的远程 SQL Server 数据库。
第 7 章 — Internet
本章介绍一组常用的 Internet 应用程序方案,并针对每种方案介绍了推荐的安全配置、配置步骤及分析。
本章介绍的 Internet 应用程序方案如下:- ASP.NET 到 SQL Server
- ASP.NET 到远程 Enterprise Services 到 SQL Server
图 7 中显示了此方案。
图 7 ASP.NET 到远程 Enterprise Services 到 SQL Server 的安全配置
阅读本章可以了解到如何执行以下任务:
- 通过 SQL Server 凭据数据库使用表单身份验证。
- 避免在凭据数据库中存储密码。
- 使用 URL 授权和 .NET 角色向 Internet 用户授权。
- 从 ASP.NET Web 应用程序通过防火墙对 SQL Server 使用 Windows 身份验证。
- 使用 SSL 和 IPSec 的组合保护机密数据。
- 使用 SOAP 从 ASP.NET Web 应用程序通过防火墙与远程 Enterprise Services 应用程序进行通信。
- 保护对应用程序中间层服务组件的调用。
第 8 章 — ASP.NET 安全性
本章深入介绍了 ASP.NET Web 应用程序的安全性建议,其中包括 IIS 和 ASP.NET 所提供的身份验证、授权和安全通信服务,如图 8 所示。
图 8 ASP.NET 安全服务阅读本章可以了解到如何执行以下任务:
- 配置各种 ASP.NET 身份验证模式。
- 实施表单身份验证。
- 实施 Windows 身份验证。
- 使用 IPrincipal 和 IIdentity 对象。
- 有效地使用 IIS 和 ASP.NET 网关守卫。
- 配置和使用 ASP.NET 文件授权。
- 配置和使用 ASP.NET URL 授权。
- 使用主体权限要求和 IPrincipal.IsInRole 实施声明式、命令式和编程方式的基于角色的安全机制。
- 了解何时应该以及何时不应该在 ASP.NET Web 应用程序中使用模拟。
- 选择适当的帐户来运行 ASP.NET。
- 使用 ASP.NET 进程标识访问本地和网络资源。
- 使用本地 ASPNET 帐户访问远程 SQL Server 数据库。
- 从 ASP.NET 调用 COM 对象。
- 在 Web 宿主环境中有效地使用匿名 Internet 用户帐户。
- 在 ASP.NET Web 应用程序中存储机密。
- 保护会话和视图状态。
- 在网络场方案中配置 ASP.NET 安全性。
第 9 章 —企业服务安全性
本章解释如何保护 Enterprise Services 应用程序所包含的服务组件中的业务功能。本章介绍了如何以及何时使用 Enterprise Services (COM+) 角色进行授权,以及如何配置 RPC 身份验证和模拟,还介绍了如何从 ASP.NET Web 应用程序安全调用服务组件以及如何通过中间层服务组件标识和传递原调用方的安全上下文。
图 9 显示了本章介绍的 Enterprise Services 安全功能。
图 9 Enterprise Services 安全性概况阅读本章可以了解到如何执行以下任务:
- 使用 .NET 属性配置 Enterprise Services 应用程序。
- 保护服务器和库应用程序。
- 选择适当的帐户来运行 Enterprise Services 的服务器应用程序。
- 同时以编程方式和声明方式实施方法级别基于 Enterprise Services (COM+) 角色的安全性。
- 将 ASP.NET 配置为 DCOM 客户端。
- 从 ASP.NET 安全地调用服务组件。
- 比较 Enterprise Services (COM+) 角色与 .NET 角色。
- 在服务组件内标识调用方。
- 在服务组件内使用编程模拟将原调用方的安全上下文传过 Enterprise Services 应用程序。
- 从服务组件访问本地和网络资源。
- 使用 RPC 加密来保护传递给服务组件和从服务组件传出的机密数据。
- 了解 RPC 身份验证级别协商的过程。
- 通过防火墙使用 DCOM。
第 10 章 — Web 服务安全性
本章重点介绍使用 IIS 和 ASP.NET 的基础功能的 Web 服务的平台级别安全性。对于消息级别安全性,Microsoft 正在开发 Web 服务开发工具包,利用该工具包,您可以构建符合 WS-Security 规范(全局 XML 体系结构 (GXA) 提案的一部分)的安全解决方案。
图 10 显示了 ASP.NET Web 服务平台安全性体系结构。
图 10 Web 服务安全性体系结构阅读本章可以了解到如何执行以下任务:
- 实施基于平台的 Web 服务安全解决方案。
- 开发 Web 服务的身份验证和授权策略。
- 在 Web 服务中使用客户端证书身份验证。
- 使用 ASP.NET 文件授权、URL 授权和 .NET 角色在 Web 服务中提供授权。
- 将原调用方的安全上下文传过 Web 服务。
- 使用 SSL 调用 Web 服务。
- 从 Web 服务访问本地和网络资源。
- 将身份验证凭据通过 Web 服务代理传递到 Web 服务。
- 为 Web 服务实施受信任的子系统模型。
- 从 Web 服务调用 COM 对象。
第 11 章 –远程处理安全性
.NET Framework 提供了远程处理的基础结构,这样客户端就可以与驻留在远程应用程序域或进程中的对象或远程计算机上的对象通信。本章介绍了如何实施安全的 .NET Remoting 解决方案。
阅读本章可以了解到如何执行以下任务:- 为远程组件选择适当的主机。
- 使用所有可用的网关守卫提供纵深防御安全机制。
- 使用 URL 身份验证和 .NET 角色授予远程组件的访问权限。
- 在远程处理中使用文件身份验证。这要求创建与远程组件对象 URI 相对应的、实际的 rem 或 .soap 文件。
- 从远程组件访问本地和网络资源。
- 将身份验证凭据通过远程组件代理对象传递到远程组件。
- 将原调用方的安全上下文传过远程组件。
- 联合使用 SSL 和 IPSec 保护远程组件的往来通信。
- 了解何时使用远程处理,何时使用 Web 服务。
第 12 章 — 数据访问安全性
本章介绍有助于您开发安全的数据访问策略的建议和指导。图 11 显示了本章介绍的几项关键内容。这包括:安全存储连接字符串;使用适当的标识访问数据库;保护传入和传出数据库的数据;使用适当的身份验证机制;在数据库中实施授权。
图 11阅读本章可以了解到如何执行以下任务:
- 从 ASP.NET 对数据库使用 Windows 身份验证。
- 保护连接字符串。
- 从 ASP.NET Web 应用程序使用 DPAPI 存储机密(如连接字符串和凭据)。
- 将身份验证凭据安全地存储在数据库中。
- 验证用户输入,以防 SQL 注入式攻击。
- 减轻与使用 SQL 身份验证相关的安全威胁。
- 了解要使用的数据库角色类型。
- 比较和对比数据库用户角色与 SQL Server 应用程序角色。
- 使用 IPSec 和 SSL 保护与 SQL Server 的通信。
- 创建权限最少的数据库帐户。
- 在 SQL Server 中启用审核。
第 13 章 – 安全问题疑难解答
本节介绍一组疑难解答提示、技术和工具,帮助您诊断与安全有关的问题。其他信息
本指南这一节中的补充信息可帮助您加深对前面各章讲述的技术、策略和安全解决方案的理解。详尽的“如何做”主题为您提供了循序渐进的步骤,从而帮助您实施特定的安全解决方案。它包含以下信息: