限制对 ASP.NET 网站的访问
更新:2007 年 11 月
对应用程序的访问限制通常划分为两个主题:身份验证和授权。前者表示应用程序如何标识用户身份,后者表示应用程序如何标识用户有权执行哪些操作。本主题概述了 ASP.NET Web 应用程序中的身份验证和授权。有关详细信息,请参见 ASP.NET Web 应用程序安全性。
对用户进行身份验证
ASP.NET 应用程序提供了几种不同的选项来对用户进行身份验证。对于任何用户都可以查看的只读应用程序,应使用匿名身份验证。若要更严格地限制对应用程序的访问,需要使用某种形式的身份验证来标识用户。对 ASP.NET 应用程序的用户进行身份验证时,有下列两种标识应予考虑:应用程序标识和 ASP.NET 用户标识。前者用于访问 Windows 资源,后者用于向 ASP.NET 标识用户。
应用程序可以在没有 ASP.NET 用户标识的情况下运行,但您将始终有 Windows 应用程序标识。若要帮助保护应用程序,应将应用程序的 Windows 标识限定为必需的资源,如文件和数据库访问。
ASP.NET 应用程序标识
当 ASP.NET 页正在执行时,服务器必须具有正在执行 ASP.NET 代码的进程的安全上下文(或标识)。在使用 Windows 集成安全性保护资源(如使用 NTFS 文件系统保护的文件或网络资源)时,使用此标识。
例如,如果文件包含存储在应用程序的 App_Code 子目录中的应用程序代码,则只能由 ASP.NET 应用程序标识读取。因此,可以限制 App_Code 目录中文件的安全设置,以便 ASP.NET 应用程序标识只有读访问权限。ASP.NET 应用程序的 Windows 标识的另一个常见用法就是作为使用集成安全性连接到 SQL Server 的标识。有关更多信息,请参见 ASP.NET 必需的访问控制列表 (ACL) 和 如何:使用 Windows 集成安全性访问 SQL Server。
ASP.NET 应用程序的标识由若干因素确定。默认情况下,ASP.NET 页使用处理 Web 服务器上 ASP.NET 页的服务的 Windows 标识运行。在运行 Windows Server 2003 的计算机上,该标识是 ASP.NET 应用程序所属的应用程序池的标识(默认情况下为 NETWORK SERVICE 帐户)。在运行 Windows 2000 和 Windows XP Professional 的计算机上,该标识是在安装 .NET Framework 时创建的本地 ASPNET 帐户。可以根据需要将该标识配置为其他标识。有关更多信息,请参见 配置 ASP.NET 进程标识。
通过使用 system.web 配置节的 identity 元素,可以修改 ASP.NET 页运行时使用的 Windows 标识。可以使用 identity 元素指示 ASP.NET 模拟 Windows 用户 ID。模拟 Windows 标识意味着应用程序的 ASP.NET 页将以该 Windows 标识运行。可以指定要模拟的用户名和密码。或者,可以启用模拟功能,启用后 ASP.NET 将以下列两种方式之一运行:由 IIS 指定的匿名标识或由 IIS 确定的经过身份验证的浏览器标识(如匿名身份验证、Windows 集成的 (NTLM) 身份验证等)。有关更多信息,请参见 ASP.NET 模拟。
如果模拟的是 Windows 标识,可以执行代码恢复为进程的原始标识而不是模拟用户 ID。出于此原因,在需要将应用程序相互隔开的环境中,应将这些应用程序隔离在运行 Windows Server 2003 的计算机上的单独的应用程序池中。每个应用程序池都应配置为使用唯一的 Windows 标识。
如下面的代码示例所示,通过使用 GetCurrent 方法所返回的 WindowsIdentity 的 Name 属性,可以很容易地确定正在运行 ASP.NET 页的操作系统线程的 Windows 标识。
<%=System.Security.Principal.WindowsIdentity.GetCurrent().Name%>
ASP.NET 用户
ASP.NET 用户标识用于访问 ASP.NET 特定的资源。例如,可以标识应用程序的某一部分只供某些用户使用,而其他部分供所有用户使用。
ASP.NET 用户由应用程序的 Web.config 文件中 system.web 节的 authentication 元素确定。对于应用程序的 ASP.NET 标识,您有多种可供选择的身份验证方式。可以使用由 IIS、ASP.NET Forms 身份验证、Passport 身份验证或自定义身份验证方案确定的 Windows 用户名。可以使用当前 HttpContext 的 User 属性访问 ASP.NET 标识。有关详细信息,请参见 ASP.NET 身份验证。
如果使用的是 ASP.NET Forms 身份验证或自定义身份验证解决方案来提供 ASP.NET 标识,则可以使用 ASP.NET 成员资格提供用户数据存储区和用户管理功能。有关更多信息,请参见 使用成员资格管理用户。
对用户进行授权
授权涉及将用户访问范围仅限定为那些必需的资源。这包括将访问范围限定为必需的文件、数据库和应用程序的某些部分。此外,还包括使用代码访问安全性限制对代码的访问。
通过使用 NTFS 访问控制列表和 FileAuthorizationModule,可以限制文件访问权限。有关更多信息,请参见 ASP.NET 授权 和 ASP.NET 必需的访问控制列表 (ACL)。
通过使用 UrlAuthorizationModule 和 ASP.NET 角色管理,可以限制对应用程序的某些部分的访问。有关更多信息,请参见ASP.NET 授权和使用角色管理授权。