IIS 和 .NET Framework 安全

Microsoft AppFabric 1.1 for Windows Server 使用 IIS 和 .NET Framework v4 的强大安全功能来保证 Windows Process Activation Service (WAS) 中托管的 .NET Framework 4 服务的安全。为了帮助您了解如何在 AppFabric 中正确配置客户端到服务的安全,了解 IIS 和 .NET Framework 中的安全选项是非常重要的。

通常,提供了很多层安全选项,您应该使用最适合您的部署的安全选项。每个安全层都能够保证特定资源的安全。例如,IIS 中的工具通常提供保证 IIS 项目(如站点和应用程序)安全的方式,而 .NET Framework 4 安全设置可以应用于 WCF/WF 服务概念(如服务、终结点和操作)。

有关安全的详细信息,请参阅 Windows Communication Foundation 安全 (https://go.microsoft.com/fwlink/?LinkId=183157) 和 IIS 安全 (https://go.microsoft.com/fwlink/?LinkId=183159)。

IIS 安全和 AppFabric

IIS 会影响来自调用客户端的应用程序的安全性,并且当 .NET Framework 服务访问监控和暂留数据存储时也会影响安全性。IIS 在以下方面影响 AppFabric 安全:

  • IIS_IUSRS。 用于管理对默认 IIS 安装中文件和文件夹的运行时访问的 Windows 安全组。

    security安全 注意
    不要将 Windows 安全组 IIS_IUSRS 与 SQL Server 登录名称 IIS_IUSRS 混淆。它们是相关却彼此独立的实体。

  • 应用程序池标识。 IIS 在运行时将所有应用程序池标识动态插入 IIS_IUSRS 组中。此安全组有权访问必要的数据存储,尤其是暂留数据存储。有关详细信息,请参阅 SQL Server 安全

AppFabric 的 .NET Framework 安全性

当我们讨论在 AppFabric 中配置的 .NET Framework 服务的安全性时,我们实际上是指 WCF。WCF 定义用于在 WCF 客户端和 .NET Framework(WCF 或 WF)服务之间通信的传输协议。它是 .NET Framework 的一部分,为快速构建面向服务的应用程序(这些应用程序在 Web 和企业之间进行通信)提供了统一编程模型。WCF 不仅仅与现有安全基础结构集成,而且还通过使用安全的 SOAP 消息将分布式安全扩展到仅 Windows 域之外。有关详细信息,请参阅 Windows Communication Foundation 安全 (https://go.microsoft.com/fwlink/?LinkId=183157) 和安全体系结构 (https://go.microsoft.com/fwlink/?LinkId=183160)。

组合 IIS 和 .NET Framework 安全性

应用程序的完整性是非常关键的,目的是为了确保发送到某个服务的消息在传输过程中不会被查看或修改。您可以使用加密和签名来完成该操作。但是仅当您还可以通过完全确定调用客户端应用程序的标识进行验证或身份验证时,消息传输才真正安全。对于 AppFabric,重要的是了解 IIS 和 WCF 如何一同工作以确保这种情况的发生。

有关围绕 Web 服务安全的模式和操作的详细信息,请参阅模式和操作:提高 Web 服务安全性指南 (https://go.microsoft.com/fwlink/?LinkId=183161)。

AppFabric 中的 IIS 身份验证

Windows 中的 WCF 传输安全机制取决于使用的绑定和后续传输。例如,当使用 WSHttpBinding 类时,传输为 HTTP,并且用于保证传输安全的主要机制是通过 HTTP 的安全套接字层 (SSL),通常被识别为 HTTPS。消息安全使用 WS 安全规范来保证处于消息级别的消息的安全。它需要增强 SOAP 消息以在 SOAP 消息级别(而不是传输级别)确保机密性、完整性和身份验证。

托管服务模式

托管服务可以在两种模式下运行:混合传输模式或 ASP.NET 兼容性模式。模式由应用程序级别的配置标记 aspNetCompatibilityEnabled 控制。还可以在运行时从静态属性 ServiceHostingEnvironment.AspNetCompatibilityEnabled 中获取此标记。默认情况下,aspNetCompatibilityEnabled 标记为 false,因此除非您明确更改此设置,否则服务会在混合传输模式下运行。

<system.serviceModel>
<serviceHostingEnvironment aspNetCompatibilityEnabled="false"/>
</system.serviceModel>

混合传输模式

在混合传输模式下,HTTP 模块在管道的早期阶段截获请求:BeginRequest。当收到请求时,HTTP 模块会将 HttpContext.Current 设置为 Null,并还原模拟(如果线程被模拟)。因为在此早期阶段截获了客户端请求,所以其他 HTTP 功能会自动禁用。因此当在混合传输模式下运行时,服务无权访问以下特定于 ASP.NET HTTP 的功能:

  • HttpContext.Current。 在此模式下,它始终为 Null。WCF 提供此功能的对应功能:OperationContext.Current。

  • 文件/URL 授权。 此传输层授权功能通常通过 ASMX 服务的 Web.config 文件中的 <system.web/authorization> 部分启用。传输授权在 WCF 的混合模式下禁用。进行文件/URL 授权的唯一选择是使用在 WCF 中实现的消息级别授权。

  • 模拟。 当在服务器上执行操作时,模拟允许服务充当客户端。ASP.NET 模拟功能通常通过 ASMX 服务的 Web.config 文件中的 <system.web/identity> 部分启用。在混合模式下,该功能无法在 WCF 传输层中使用。

  • 会话状态。 在混合模式下不支持 ASP.NET 会话状态。WCF 具有其自己的可靠会话实现,该实现提供灵活的会话状态管理。WCF 的最大问题是会话状态不能在应用程序回收时保留,并且在 Web 园或 Web 场中不起作用。这是因为与(已禁用)ASP.NET 状态服务不同的是,没有在应用程序或进程之间共享状态的机制。

  • 其他 HTTP 功能。 其他 HTTP 功能依赖于 HttpContext.Current 并且在混合模式下不受支持。例如,您不能期望从 ConfigurationManager.AppSettings 收到正确结果。通过 <system.web/globalization> 的全球化功能不可用。

当在混合传输模式下运行时,在对 .NET Framework 服务的 WCF 调用中会忽略 IIS 身份验证。这使得 WCF 安全成为对 WCF 客户端和 .NET Framework 服务之间的消息传输进行身份验证并确保其安全的主要机制。在混合传输模式下,所有传输都视为相同。一个服务可以拥有多个 WCF 终结点并且它们可以侦听相同或不同的传输(如 HTTP、net.tcp、net.pipe、net.msmq 等等)。但是,在混合传输模式下运行的托管服务仍然依赖于 ASP.NET 和 IIS 来提供托管环境、应用程序配置和部署。

ASP.NET 兼容性模式

若要在 WAS 托管的任何应用程序(当然包括在 AppFabric 中托管的任何应用程序)中使用 IIS 身份验证,需要使用 ASP 兼容性模式和 WCF 传输安全。只能通过使用 ASP 兼容性模式来利用以下 IIS 安全功能:

  • 控制允许哪些 Windows 用户以及哪些 Windows 组的成员使用 IIS 管理器连接到托管服务的站点或应用程序。

  • 将网站转换为 IIS 虚拟目录,然后采用两种方法将安全设置设为该虚拟目录的物理路径。传递身份验证告知 IIS,在访问虚拟目录的物理路径时将经过身份验证的用户的凭据传递给 Windows 文件系统。或者,您可以为托管 .NET Framework 服务的进程指定一个特定的用户身份以访问指定物理路径中的所有内容。

  • 选择适当的 IIS 身份验证方法(匿名、基本、表单、摘要、Windows 身份验证或 ASP.NET 表单模拟)以控制对与网站关联的服务的调用安全。

无论是否启用 ASP 兼容性模式,您都可以利用以下 IIS 安全功能:

  • 将 SSL 设置配置为使用 64 位或 128 位加密,并配置处理传入请求的客户端证书的方式。

  • 创建授权规则以允许或拒绝用户访问网站或应用程序。

  • 使用 IIS 日志记录功能创建传入请求的安全审核日志。

  • 编辑监控和暂留数据库中围绕连接字符串的安全。

  • 管理调用服务的客户端的绑定设置。

  • 在包含的网站或其包含的服务应用程序上配置文件级别的执行权限(完全控制权限、读取和执行权限、列出文件内容权限、写入权限等等)。

  • 将自定义应用程序池的默认 NetworkService 身份更改为它可以用于运行的特定身份。如果在 SQL Server 上使用集成安全性,则这是用于调用 SQL Server 的身份。

有关详细信息,请参阅 WCF 服务和 ASP.NET (https://go.microsoft.com/fwlink/?LinkId=183163)。

身份验证指南

为应用程序启用 IIS 身份验证:

  • 使用 ASP 兼容性模式

  • 使用支持传输安全模式的基于 HTTP 的 WCF 绑定(basicHttpBinding、wsHttpBinding 和 wsFederationHttpBinding)

满足这些要求之后,将 IIS 和托管的 .NET Framework 服务配置为使用兼容的 IIS 和 WCF 安全设置。将应用程序的各种安全设置配置为与所有其服务的安全和绑定相匹配。指定不同的方案将导致 WCF 服务激活错误。WCF 中的安全模式(在本例中,为传输安全模式)是在绑定元素中指定的。它们必须支持身份验证,因此确保您选择的 WCF 安全设置与 IIS 设置兼容。传输映射到绑定的已配置 WCF 身份验证模式。服务通过其绑定配置规定身份验证模式,并且 WCF 客户端必须在其配置文件中符合此项规定。必须将客户端配置为提供形式正确的客户端凭据,以支持服务提供的身份验证方案。由于 AppFabric 不提供 UI 元素来作出这些类型的更改,因此您必须在适用的 Web.config 文件中手动执行该操作。

security安全 注意
wsDualHttpBinding 仅支持基于消息的安全性,因此如果您在服务中使用 IIS 身份验证,那么您将无法使用它。

  2012-03-05