议您使用专门配置的帐户来运行 ASP .NET 应用程序辅助进程 (aspnet_wp.exe),该
帐户的权限比默认系统帐户低。主要原因有两个。第一,如果出现安全问题,入侵者没
有管理权限。第二,它允许应用程序服务提供者 (ASP) 使用较低权限的帐户运行应用程
序,因此寄宿的应用程序不会破坏服务器计算机的完整性或执行需要管理员权限的操作
。
要使用指定帐户运行 ASP 辅助进程,需要在
\WINNT\Microsoft.NET\Framework\Version\Config 文件夹下的根配置文件
(machine.config) 中添加一个 <processModel> 元素,如下所示:
<system.web>
<processModel enable="true" username="domain\user" password="pwd"/>
</system.web>
除指定特定的用户帐户外,您还可以将 username 属性设置为两个专门识别的值“SYSTE
M”和“MACHINE”之一。无论设为哪个值,密码属性必须设为“AutoGenerate”,因为
不需要指定凭据。“SYSTEM”设置(默认)使用系统帐户运行辅助进程,而“MACHINE”
使用名称中带前缀 ASPNET 的特殊帐户运行辅助进程。该帐户与 IWAM_MACHINENAME 帐
户相同,IIS 寄放标准 ASP 应用程序时使用 IWAM_MACHINENAME 帐户来运行
dllhost.exe 的实例。ASPNET 帐户在 .NET 的安装过程中创建。
如果您使用自定义帐户,该帐户必须具有对以下目录的必要访问权限。
对 %installroot%\ASP .NET 临时文件目录具有读/写访问权限。该根目录下的子目录用
于动态编译输出。
对 %temp% 目录具有读/写访问权限。在动态编译过程中,编译器将使用该目录。
对应用程序目录具有读访问权限。
对 %installroot% 层次结构具有读访问权限,以允许访问系统程序集。
请注意,相关的 ACE 是在安装 ASPNET 帐户的过程中定义的。
如果您使用专门配置的进程帐户,您应了解它对使用模拟的限制。虽然您可以继续模拟
客户端标识,但您不能使用模拟的扩展形式(其指定的模拟帐户已在应用程序的
Web.config 文件中定义)。这是因为该选项要求辅助进程具有 SE_TCB_NAME (“作为操
作系统的一部分运行”) 权限,而权限较低的进程标识一般不具有此权限。针对每个请
求的模拟仍然有效,因为 IIS 创建了登录会话,并将模拟标记直接传递给辅助进程。请
注意,此限制仅适用于 Windows 2000 和 Windows NT 4。Microsoft Windows XP 包含
有增强功能,允许在不具有此权限的情况下生成特定的登录会话。
详细信息,请阅读《.NET 框架开发人员指南》的以下章节:
ASP .NET 安全性的工作原理
ASP .NET 身份验证
ASP .NET 配置概念
结合使用 IIS 身份验证与 ASP .NET 模拟
有关 IIS 5.0 中身份验证的详细信息,请参阅文章 Internet Information Services
5.0 身份验证方法(英文)。
-----------------------------------------------------------------------------
---
身份验证方法
在 .NET Web 应用程序中可以采用各种身份验证选项。例如,您可以选择使用某种受支
持的 IIS 身份验证机制,或在应用程序代码中执行身份验证。选择身份验证方法时,应
考虑以下部分或所有因素:
服务器和客户端操作系统
客户端浏览器类型
用户数量、位置、用户名以及密码数据库类型
部署考虑,如应用程序是基于 Internet 还是 Intranet,及其是否位于防火墙之后。
应用程序类型,如,是交互式网站还是非交互式 Web 服务
要保护的数据的敏感度
性能和可伸缩性因素
身份验证要求。例如,您希望所有用户均可使用应用程序;或希望限制某些区域仅供注
册用户使用,而另一些区域“仅限管理员使用”。
确定身份验证方法
使用附录A中的流程图,有助于您根据具体应用程序的要求确定最适合的身份验证方法。
要使用该流程图,请先回答有关用户群和部署模型性质的问题。图的结尾处为适当的备
选身份验证方法。
检查完流程图后,您应研究以下小节。这些小节提供了关于各种身份验证方法的更详细
信息,并提供进一步的指导以帮助您优化决策程序。在本节将要结束之际,您应该能够
选出一个备选身份验证方法。
流程图决策点解释
用户是否必须登录?是否需要用户名和密码以访问站点或服务?
是否需要个性化?站点是否可以不需要用户登录而提供个性化内容?
用户帐户?用户帐户是存储于 Windows NT 域帐户、Active Directory,还是其他数据
存储区,例如关系型数据库、其他 LDAP(轻便目录访问协议)目录服务或 XML 文件?
需要单一登录还是无缝登录?您是否希望用户从登录页登录,或需要自动进行身份验证
?例如,在自动化的企业对企业 (B2B) 交易中可能需要自动身份验证。
您是否需要安全登录?您的系统是否需要使黑客极难通过网络来盗用用户名和密码?这
个决策一般是根据站点上可用数据的敏感度来做出的。
应用程序将在 Internet 上运行吗?应用程序是否位于防火墙之后(用户未经过域身份
验证),或应用程序将基于 Intranet(最终用户可能已经过域身份验证)?
您是否需要代理安全环境?您是否需要业务组件与呼叫方标识共同运行?如果是这样,
则需要模拟。而且,如果您需要访问系统资源(例如消息队列、数据库或远程计算机中
的文件系统),则需要代理级别的模拟。
服务器和客户端是否仅运行 Windows 2000?运行环境中的计算机是同样运行 Windows
2000,还是会有客户端运行着其他操作系统(如 Windows 9x 和 Windows NT 4.0)?
匿名身份验证
使用匿名身份验证,服务器不请求客户端向其发送用户凭据。如果您的站点或服务可供
公开使用,而您不必知道呼叫方的标识,那么这就是一个好的选择。同时,也不会由于
与支持的身份验证机制不兼容而造成浏览器限制。所有用户均可访问配置为匿名身份验
证的站点。值得注意的是,尽管您可能已配置了 IIS 以进行匿名身份验证,但身份验证
可能是在 ASP .NET 层进行,而这并不是真正的匿名身份验证。本节假设 IIS 和应用程
序均不要求登录。
典型应用方案
以下情况下,您应考虑使用匿名身份验证:
无论是对于登录还是业务逻辑组件,您都不需要知道呼叫方的名字和/或密码。
您所保护的信息被认为是“公有的”。
以下情况下,您不应考虑使用匿名身份验证:
您要求使用登录名和密码以限制用户群。
其他考虑
选择匿名身份验证时,您还应考虑以下问题。
站点中仅包含个性化内容
如果您设计的站点仅包含个性化内容,则匿名身份验证可能是一个好选择。例如,新闻
站点可以根据用户的邮政编码来提供当地信息,而不需要用户明确登录。个性化功能可
以通过使用独立于身份验证的 Cookie 来执行。有关 Cookie 的详细信息,请参阅本文
档后面的 Cookie 一节。
模拟
当使用匿名身份验证时,应用程序线程将运行为:
内部匿名 Internet 帐户 IUSR_MACHINENAME。
在 IIS 中为匿名用户配置的帐户。
IIS 系统帐户。
如果您的应用程序使用其他资源,例如 COM+ 组件、数据库、消息队列或 UNC 文件共享
,您需要为匿名用户启用相应权限。如果是这样,请考虑以下选项:
设置域控制器以包含所有 Web 和应用程序服务器。配置匿名用户以作为域用户运行,并
具有访问相应资源的权限。此方法中的帐户管理是集中进行的,因此更易于管理。
如果您不在域中运行,则可以在每个 Web 和应用程序服务器中创建一个具有相同名字和
密码的用户。由于重复帐户的管理比较复杂,所以并不推荐这种方法。
性能
使用匿名网站而不使用 ASP .NET 模拟将带来最佳性能,但是应用程序配置的安全性最
差。
实现
要实现匿名身份验证,应为匿名身份验证配置 IIS 并配置适当的匿名用户帐户。使用
Web.config 文件配置 ASP .NET 以使用无身份验证。
//web.config 文件
<system.web>
<authentication mode="None" />
</system.web>
基本身份验证
当 IIS 配置为基本身份验证时,它将指示浏览器通过 HTTP 发送用户凭据。密码和用户
名使用 Base64 编码方法进行编码。尽管密码已经编码,但由于其解密相对较容易,所
以仍然是不安全的。浏览器将通过对话框提示用户,然后重新发出原始匿名请求和提供
的凭据(包括用户名和密码)。弹出式登录对话框不一定适合您的用户界面设计要求。
大多数 Internet 浏览器支持基本身份验证。
典型应用方案
以下情况下,您应考虑使用基本身份验证:
您的用户具有 Windows NT 域或 Active Directory 帐户。
您需要支持多个浏览器类型,包括 Netscape Navigator 和所有版本的 Internet
Explorer(包括 Pocket PC 和 Windows CE 平台)。
您需要支持通过 Internet 进行身份验证。
您需要在应用程序代码中访问明文密码。
您需要支持代理。
以下情况下,您不应考虑使用基本身份验证:
需要安全登录且不使用安全通道,例如由安全套接字层 (SSL) 提供的通道。
您的用户存储在自定义数据库中,并且没有 Windows 帐户。
您需要一个自定义表单作为登录页提供给用户。
其他考虑
选择基本身份验证时,您还应考虑以下问题:
使用基本身份验证代理