ASP.NET 安全结构

更新:2007 年 11 月

本节提供了 ASP.NET 安全基础结构的概述。下图说明 ASP.NET 中安全系统之间的关系。

ASP.NET 结构
yedba920.urtarch(zh-cn,VS.90).gif

如图所示,所有 Web 客户端都通过 Microsoft Internet 信息服务 (IIS) 与 ASP.NET 应用程序通信。IIS 根据需要对请求进行身份验证,然后找到请求的资源(如 ASP.NET 应用程序)。如果客户端已被授权,则资源可用。

当运行 ASP.NET 应用程序时,它可以使用内置的 ASP.NET 安全功能。另外,ASP.NET 应用程序还可以使用 .NET Framework 的安全功能。有关更多信息,请参见 安全性的基础概念

将 ASP.NET 身份验证与 IIS 集成

除了依赖 IIS 的身份验证功能,您还可以在 ASP.NET 中执行身份验证。考虑 ASP.NET 身份验证时,您应该了解与 IIS 身份验证服务的交互。

IIS 假定一组凭据映射到一个 Microsoft Windows NT 帐户并且必须使用这些凭据对用户进行身份验证。在 IIS 5.0 和 IIS 6.0 中有三种不同类型的身份验证:基本、摘要式和 Windows 集成安全性(NTLM 或 Kerberos)。可以在 IIS 管理服务中选择要使用的身份验证类型。有关 IIS 身份验证的更多信息,请参见 IIS 文档。

如果用户请求映射到 ASP.NET 应用程序的 URL,则该请求和身份验证信息将传送给应用程序。ASP.NET 提供 Forms 身份验证。Forms 身份验证是一个系统,将未经身份验证的请求重定向到您创建的 ASP.NET 网页。用户提供凭据并提交该页。如果应用程序对请求进行身份验证,则系统会在 Cookie 中发出一个身份验证票,其中包含用于重新获取标识的凭据或密钥。后面的请求将在请求中包含身份验证票。

yedba920.alert_note(zh-cn,VS.90).gif说明:

ASP.NET 成员资格和 ASP.NET 登录控件隐式使用 Forms 身份验证。

ASP.NET 配置文件安全设置

ASP.NET 安全设置是在 Machine.config 和 Web.config 文件中进行配置的。与其他配置信息一样,在当前 .NET Framework 安装的 Config 子目录中的 Machine.config 文件中建立基本设置和默认设置。可以在网站根目录和应用程序根目录中的 Web.config 文件中建立特定于站点的设置和特定于应用程序的设置(包括重写 Machine.config 文件中的设置)。子目录会继承上一级目录的设置,除非子目录中的 Web.config 文件重写这些设置。若要查看分层配置系统针对安全性的工作方式的示例,请参见 configSections 元素(常规设置架构)

Web.config 文件有三个主要的子节:authenticationauthorizationidentity 节。通常在 Machine.config 文件中设置各个安全元素的值,并根据需要在应用程序级别的 Web.config 文件中重写这些值。所有子目录都自动继承那些设置。但是,子目录可以有自己的配置文件,这些配置文件重写继承的设置。

yedba920.alert_note(zh-cn,VS.90).gif说明:

ASP.NET 配置仅适用于 ASP.NET 资源,即那些注册为由 Aspnet_isapi.dll 扩展在 IIS 中处理的资源。对于不是由 ASP.NET 处理的资源,ASP.NET 配置无法为它们提供授权。因此,所有用户都可以访问 .txt、.htm、.html、.gif、.jpg、.jpeg、.asp 和其他类型的文件(受 IIS 权限制约)。例如,虽然一个目录中的 ASP.NET 资源可能由 Web.config 文件限制,但如果目录浏览是打开的且没有其他限制时,所有用户仍然可以查看位于该目录中的文件。您可以通过使用 IIS 管理工具将此类文件扩展名显式映射到 Aspnet_isapi.dll 扩展,将这些类型的文件置于 ASP.NET 安全管理中。但是,通过 ASP.NET 处理这些类型的文件可能会对网站的性能造成影响。

可以使用 location 配置元素来指定设置要应用到的特定文件或目录。有关更多信息,请参见configSections 元素(常规设置架构)配置特定文件和子目录。有关 ASP.NET 配置总体情况的更多详细信息,请参见 ASP.NET 配置概述

下面的示例演示了一个配置文件的安全节的语法:

<authentication mode="[Windows|Forms| None]">
  <forms name="name" 
    loginUrl="url" 
    protection="[All|None|Encryption|Validation]"
    path="path" timeout="minutes"
    requireSSL="[true|false]" 
    slidingExpiration="[true|false]">
    <credentials passwordFormat="[Clear|MD5|SHA1]">
      <user name="********" 
        password="********"/>
      </credentials>
  </forms>
</authentication>

<authorization>
  <allow users="comma-separated list of users"
      roles="comma-separated list of roles" />
  <deny  users="comma-separated list of users"
      roles="comma-separated list of roles" />
</authorization>

<identity impersonate ="[true|false]"
  userName="domain\username"
  password="password" />

<trust level="[Full|High|Medium|Low|Minimal]" 
  originUrl=""/>

<securityPolicy>
  <trustLevel name="Full" policyFile="internal"/>
  <trustLevel name="High" policyFile="web_hightrust.config"/>
  <trustLevel name="Medium" policyFile="web_mediumtrust.config"/>
  <trustLevel name="Low"  policyFile="web_lowtrust.config"/>
  <trustLevel name="Minimal" policyFile="web_minimaltrust.config"/>
</securityPolicy>

这些元素的默认设置如下表所示。

默认值

说明

<allow roles="" />

一个空字符串,表明默认情况下允许所有角色。

<allow users="*" />

一个空字符串,表明允许所有用户访问(无需身份验证)。

<authentication mode="Windows" />

身份验证类型,它决定当前的 User 值的来源。默认值为 Windows。

<credentials passwordFormat="SHA1" />

用于密码的哈希算法。默认值为 SHA1

<deny roles="" />

一个空字符串,表明默认情况下不拒绝任何角色。

<deny users="" />

一个空字符串,表明默认情况下不拒绝任何用户。

<forms loginUrl="logon.aspx" />

将请求定向到的 URL(如果将身份验证 mode 设置为 Forms 并且请求没有有效的身份验证票)。

<forms name=".ASPXAUTH" />

Forms 身份验证 Cookie 在用户的计算机上存储时所使用的名称。

<forms path="/" />

Forms 身份验证应用到的路径。默认为应用程序根目录下的所有路径。

<forms protection="All" />

应用到 Forms 身份验证票的安全性。值包括:All、None、Encryption 和 Validation。

<forms timeout="30" />

Forms 身份验证票过期之前的超时时间(以分钟为单位),过期之后用户必须重新进行身份验证。

<forms requireSSL="false" />

一个布尔值,它表明是否需要 SSL 连接来传输身份验证 Cookie。

<forms slidingExpiration="true" />

一个布尔值,它表明是否启用可调过期。有关更多信息,请参见 SlidingExpiration 属性。

<identity impersonate="false" />

一个布尔值,它表明是否禁用模拟。有关更多信息,请参见 ASP.NET 模拟

<identity userName="" />

一个空字符串,表明默认情况下不指定任何用户标识。

<identity password="" />

一个空字符串,表明默认情况下不指定用户标识的密码。

<trust level="Full" originUrl="" />

将应用于应用程序的安全策略。

<trustLevel name="Full" policyFile="internal"/>

“完全”信任级别的默认策略文件。

<trustLevel name="High" policyFile="web_hightrust.config"/>

“高”信任级别的默认策略文件。

<trustLevel name="Medium" policyFile="web_mediumtrust.config"/>

“中”信任级别的默认策略文件。

<trustLevel name="Low" policyFile="web_lowtrust.config"/>

“低”信任级别的默认策略文件。

<trustLevel name="Minimal" policyFile="web_minimaltrust.config"/>

“最小”信任级别的默认策略文件。

请参见

概念

ASP.NET 配置概述

其他资源

保证 ASP.NET 网站的安全

安全性的基础概念

Forms 身份验证提供程序