如何使用 Windows 安全保护 ASP.NET 应用程序

文章翻译 文章翻译
文章编号: 315736 - 查看本文应用于的产品
展开全部 | 关闭全部

本文内容

概要

ASP.NET 可以与 Microsoft Internet 信息服务 (IIS) 一起使用,根据 Web 用户的 Microsoft Windows 2000 或 Windows Server 2003 用户帐户凭据来验证他们的身份。另外,ASP.NET 执行引擎可以配置为在访问资源(如数据库或文件)时,模拟 Web 用户或者使用它自己的 Windows 标识。


要求

要执行本文介绍的操作步骤,需要以下硬件、软件和网络结构:
  • Windows 2000 Server Service Pack 2
  • IIS 5.0
  • 包含 IIS 6.0 的 Windows Server 2003
  • Microsoft Internet Explorer 6.0
  • Microsoft Visual Studio .NET
还需要具有以下经验:
  • 使用 Visual Basic .NET 进行 ASP.NET 开发
  • IIS 管理
  • Windows 2000 用户帐户管理

如何开发网站

在本操作步骤中,您将创建一个简单的 ASP.NET Web 应用程序,它将由 Windows 身份验证提供保护。
  1. 启动 Visual Studio .NET,然后创建一个名为“WindowsSite”的 Visual Basic ASP.NET Web 应用程序。
  2. 将一个标签控件从工具箱中拖放到 WebForm1.aspx Web 窗体上,然后将其 ID 属性设置为 authUserPrincipalLabel
  3. 将另一个标签控件从工具箱中拖放到 WebForm1.aspx Web 窗体上,然后将其 ID 属性设置为 aspPrincipalLabel
  4. 双击 WebForm1.aspx 查看代码窗口,然后在类声明的上方添加以下 Imports 语句:
    Imports System.Security
    						
    将以下代码添加到 Page_Load 事件过程中:
    Dim authUserName As String
    Dim aspUserName As String
    authUserName = User.Identity.Name
    aspUserName = Principal.WindowsIdentity.GetCurrent.Name
    authUserPrincipalLabel.Text = "You are: " & authUserName
    aspPrincipalLabel.Text = "This page runs as: " & aspUserName
    					
  5. 查看项目的 Web.config 文件,然后找到 authentication 元素。验证模式属性的值是否为 Windows
  6. 编译并保存项目。
  7. 运行项目,然后确认页面显示以下消息:
    • 在 Windows 2000 中
      您是:
      本页面以下列形式运行:DomainOrServer\ASPNET
    • 在 Windows Server 2003 中
      您是:
      本页面以下列形式运行:DomainOrServer\NETWORK SERVICE
    注意:由于您未由 IIS 验证身份,因此不显示您的用户名;仍启用匿名访问。
  8. 退出 Internet Explorer 以停止项目。

如何禁用匿名访问

在本操作步骤中,您将配置 IIS 以要求对 WindowsSite 站点进行集成 Windows 身份验证。
  1. 最小化 Visual Studio,然后从“管理工具”程序组启动“Internet 服务管理器”。
  2. 展开您的服务器及其默认网站,右键单击 WindowsSite 站点,然后单击属性
  3. WindowsSite 属性对话框中的目录安全性选项卡上,单击“匿名访问和身份验证控制”部分中的编辑按钮。
  4. 单击以清除“匿名访问”复选框,确认已选中“集成 Windows 验证”复选框,然后单击确定
  5. 单击确定以关闭 WindowsSite 属性对话框。
  6. 切换回 Visual Studio,然后运行项目。确认页面显示以下消息:
    • 在 Windows 2000 中
      您是:Your Windows user name
      本页面以下列形式运行:DomainOrServer\ASPNET
    • 在 Windows Server 2003 中
      您是:Your Windows user name
      本页面以下列形式运行:DomainOrServer\NETWORK SERVICE
    注意:您已通过 Windows 帐户验证了身份。如果您不曾登录到 Windows,可能已提示过您输入 Windows 用户名和密码。
  7. 退出 Internet Explorer 以停止项目。

授权

在 ASP.NET 中,我们可以通过修改 Web.config 文件中的一些附加设置来达到授权的目的。您可以允许某些用户或某些组访问这些其他设置。以下示例描述了此功能。要允许访问名为“Managers”的 Windows NT 组中的所有用户,请使用以下代码:
<configuration>
     <system.web>
       <authorization>
         <allow roles="domainname\Managers" />
         <deny users="*" />
       </authorization>
     </system.web>
   </configuration>
				
要只允许访问某些用户,请使用以下代码:
<configuration>
     <system.web>
       <authorization>
         <allow users="domainname\user1,domainname\user2,domainname\user3" />
         <deny users="*" />
       </authorization>
     </system.web>
   </configuration>
				
注意:使用逗号分隔的列表时,可以引用多个角色或用户。


如何启用模拟

在本操作步骤中,您将配置 WindowsSite 应用程序,以模拟正在访问它的 Windows 用户。
  1. 在 Visual Studio 中,查看 WindowsSite 项目的 Web.config 文件。
  2. authentication 元素后添加以下元素:
    <identity impersonate = "true" />
    					
  3. 保存 Web.config。
  4. 运行项目。确认页面显示以下信息(请注意,ASP.NET 执行引擎将使用您的 Windows 凭据,以您的身份访问资源):
    您是:Your Windows user name
    本页面以下列形式运行:Your Windows user name
  5. 退出 Internet Explorer 以停止项目。

如何指定自定义用户

在本操作步骤中,您将配置 WindowsSite 应用程序以使用自定义安全用户:
  1. 从“管理工具”程序组启动“计算机管理”功能。创建一个名为“WindowsSite”的 Windows 2000 用户帐户,并将其密码设置为“password”(注意您的服务器是否为域控制器,然后使用“Active Directory 用户和计算机”工具)。
  2. 单击以清除“用户下次登录时须更改密码”复选框。注意:所选择的自定义用户必须具有以下知识库文章中概述的权限:
    317012 INFO:ASP.NET 中的进程和请求标识
  3. 创建了 WindowsSite 帐户后,关闭用于创建此帐户的管理工具。
  4. 在 Visual Studio 中,查看 WindowsSite 项目的 Web.config 文件。
  5. 按如下所示编辑 identity 元素:
    identity impersonate = "true"
    userName = "DomainOrServerName\WindowsSite"
    password = "password"/>
    
    其中,DomainOrServerName 是您所在的 Windows 2000 域或 Windows Server 2003 域(在域环境中)名称或者是您的计算机(在工作组环境中)名称。
  6. 保存 Web.config。
  7. 运行项目。确认页面显示以下消息:
    您是:Your Windows user name
    本页面以下列形式运行:DomainOrServerName\WindowsSite
    注意:Aspnet_wp.exe 将使用您指定的 Windows 凭据,以您的身份访问资源。
  8. 退出 Internet Explorer 以停止项目。
注意:在线程上模拟特定用户的进程的标识必须具有“作为操作系统的一部分”特权。
  • 在 Windows 2000 上,默认情况下 Aspnet_wp.exe 进程在名为 ASPNET 的计算机帐户下运行。
  • 在 Windows Server 2003 上,默认情况下 Aspnet_wp.exe 进程在名为 NetworkService 的计算机帐户下运行。不过,此帐户没有模拟特定用户所需的正确特权。如果您尝试模拟特定用户,则会出现一条错误信息。
要解决此问题,请使用下列方法之一:
  • 授予 ASPNET 帐户(特权最低的帐户)“作为操作系统的一部分”特权。

    注意:虽然此方法可以解决问题,但 Microsoft 不建议使用此方法。
  • 在 Machine.config 文件的 <processModel> 配置节中,将运行 Aspnet_wp.exe 进程所使用的帐户更改为 System 帐户。
有关 ASPNET 进程的更多信息,请访问下面的 Microsoft Developer Network (MSDN) 网站:
http://msdn.microsoft.com/library/en-us/vsent7/html/vxconApplicationIdentity.asp?frame=true

疑难解答

通过使用 NTFS 文件权限,可以进一步提高(并完善)ASP.NET 网站中的 Windows 安全。如果您的 Windows 帐户不具备读取 ASP.NET 网页的权限,IIS 将提示您使用其他 Windows 凭据。同样,如果 ASP.NET 页试图访问的文件是 ASP.NET 执行引擎所使用的安全用户无法访问的,将提示您使用其他凭据。NTFS 权限是一种控制访问 网站各部分的有效方法。

参考

有关在 ASP.NET 网站中使用 Windows 身份验证的更多信息,请参阅 .NET Framework 文档中的 ASP.NET Web 应用程序“安全”主题。

另外,请参阅以下 MSDN 网站中的“Authentication in ASP.NET: .NET Security Guidance”(ASP.NET 中的身份验证:.NET 安全指南)一文:
http://msdn2.microsoft.com/en-us/library/ms978378.aspx

属性

文章编号: 315736 - 最后修改: 2007年12月4日 - 修订: 3.8
这篇文章中的信息适用于:
  • Microsoft ASP.NET 1.0
  • Microsoft Internet Information Services 5.0
  • Microsoft ASP.NET 1.1
  • Microsoft Internet Information Services 6.0
关键字:?
kbconfig kbhowtomaster kbinfo kbsecurity kbweb KB315736
Microsoft和/或其各供应商对于为任何目的而在本服务器上发布的文件及有关图形所含信息的适用性,不作任何声明。 所有该等文件及有关图形均"依样"提供,而不带任何性质的保证。Microsoft和/或其各供应商特此声明,对所有与该等信息有关的保证和条件不负任何责任,该等保证和条件包括关于适销性、符合特定用途、所有权和非侵权的所有默示保证和条件。在任何情况下,在由于使用或运行本服务器上的信息所引起的或与该等使用或运行有关的诉讼中,Microsoft和/或其各供应商就因丧失使用、数据或利润所导致的任何特别的、间接的、衍生性的损害或任何因使用而丧失所导致的之损害、数据或利润不负任何责任。

提供反馈

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com