ASP.NET 结构
如图所示,所有 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 中发出一个身份验证票,其中包含用于重新获取标识的凭据或密钥。后面的请求将在请求中包含身份验证票。
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?http://www.xvna.com、.jpg?http://www.xvna.com、.jpeg、.asp 和其他类型的文件(受 IIS 权限制约)。例如,虽然一个目录中的 ASP.NET 资源可能由 Web.config 文件限制,但如果目录浏览是打开的且没有其他限制时,所有用户仍然可以查看位于该目录中的文件。您可以通过使用 IIS 管理工具将此类文件扩展名显式映射到 Aspnet_isapi.dll 扩展,将这些类型的文件置于 ASP.NET 安全管理中。但是,通过 ASP.NET 处理这些类型的文件可能会对网站的性能造成影响。
可以使用 location 配置元素来指定设置要应用到的特定文件或目录。有关更多信息,请参见configSections 元素(常规设置架构)和配置特定文件和子目录。有关 ASP.NET 配置总体情况的更多详细信息,请参见 ASP.NET 配置概述。
下面的示例演示了一个配置文件的安全节的语法:
Code
1<authentication mode="[Windows|Forms| None]">
2 <forms name="name"
3 loginUrl="url"
4 protection="[All|None|Encryption|Validation]"
5 path="path" timeout="minutes"
6 requireSSL="[true|false]"
7 slidingExpiration="[true|false]">
8 <credentials passwordFormat="[Clear|MD5|SHA1]">
9 <user name="********"
10 password="********"/>
11 </credentials>
12 </forms>
13</authentication>
14
15<authorization>
16 <allow users="comma-separated list of users"
17 roles="comma-separated list of roles" />
18 <deny users="comma-separated list of users"
19 roles="comma-separated list of roles" />
20</authorization>
21
22<identity impersonate ="[true|false]"
23 userName="domain\username"
24 password="password" />
25
26<trust level="[Full|High|Medium|Low|Minimal]"
27 originUrl=""/>
28
29<securityPolicy>
30 <trustLevel name="Full" policyFile="internal"/>
31 <trustLevel name="High" policyFile="web_hightrust.config"/>
32 <trustLevel name="Medium" policyFile="web_mediumtrust.config"/>
33 <trustLevel name="Low" policyFile="web_lowtrust.config"/>
34 <trustLevel name="Minimal" policyFile="web_minimaltrust.config"/>
35</securityPolicy>