ASP.NET 安全结构
ASP.NET 结构
如图所示,所有 Web 客户端都通过 Microsoft Internet 信息服务 (IIS) 与 ASP.NET 应用程序通信。IIS 根据需要对请求进行身份验证,然后找到请求的资源(如 ASP.NET 应用程序)。如果客户端已被授权,则资源可用。
当运行 ASP.NET 应用程序时,它可以使用内置的 ASP.NET 安全功能。另外,ASP.NET 应用程序还可以使用 .NET Framework 的安全功能。
除了依赖 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 中发出一个身份验证票,其中包含用于重新获取标识的凭据或密钥。后面的请求将在请求中包含身份验证票。
ASP.NET 配置文件安全设置
ASP.NET 安全设置是在 Machine.config 和 Web.config 文件中进行配置的。与其他配置信息一样,在当前 .NET Framework 安装的 Config 子目录中的 Machine.config 文件中建立基本设置和默认设置。可以在网站根目录和应用程序根目录中的 Web.config 文件中建立特定于站点的设置和特定于应用程序的设置(包括重写 Machine.config 文件中的设置)。子目录会继承上一级目录的设置,除非子目录中的 Web.config 文件重写这些设置。
Web.config 文件有三个主要的子节:authentication、authorization 和 identity 节。通常在 Machine.config 文件中设置各个安全元素的值,并根据需要在应用程序级别的 Web.config 文件中重写这些值。所有子目录都自动继承那些设置。但是,子目录可以有自己的配置文件,这些配置文件重写继承的设置。
说明: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 配置概述。
下面的示例演示了一个配置文件的安全节的语法:
这些元素的默认设置如下表所示。
默认值 |
说明 |
<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"/> |
“最小”信任级别的默认策略文件。 |