ASP.NET 安全结构
更新:2007 年 11 月
本节提供了 ASP.NET 安全基础结构的概述。下图说明 ASP.NET 中安全系统之间的关系。
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 登录控件隐式使用 Forms 身份验证。 |
ASP.NET 配置文件安全设置
ASP.NET 安全设置是在 Machine.config 和 Web.config 文件中进行配置的。与其他配置信息一样,在当前 .NET Framework 安装的 Config 子目录中的 Machine.config 文件中建立基本设置和默认设置。可以在网站根目录和应用程序根目录中的 Web.config 文件中建立特定于站点的设置和特定于应用程序的设置(包括重写 Machine.config 文件中的设置)。子目录会继承上一级目录的设置,除非子目录中的 Web.config 文件重写这些设置。若要查看分层配置系统针对安全性的工作方式的示例,请参见 configSections 元素(常规设置架构)。
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 配置概述。
下面的示例演示了一个配置文件的安全节的语法:
<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"/> |
“最小”信任级别的默认策略文件。 |