(转)用 Visual Studio .NET 设计分布式应用程序—ASP.NET 模拟

另一个重要的安全功能是控制标识(在该标识下执行)的能力。模拟就是指 ASP.NET 在已经过身份验证和已授权客户端的上下文中执行代码时。默认情况下,ASP.NET 不使用模拟,而是执行所有代码,将同一用户帐户(通常为 ASPNET 帐户)用作 ASP.NET 进程。这与 ASP 的默认行为相反,ASP 默认情况下使用模拟。在 Internet 信息服务 (IIS) 6 中,默认标识为 NetworkService 帐户。

注意   模拟会显著影响性能和伸缩性。通常情况下,在调用中模拟客户端的开销比直接调用大。

使用模拟时,ASP.NET 应用程序可以选择使用它们代表的客户端的标识来执行处理线程。通常为资源访问控制使用模拟。委托是功能更强大的模拟形式,允许服务器进程作为客户端访问远程资源。有关更多信息,请参见 ASP.NET 委托

注意   模拟对于具体某个线程来说是本地的。当代码更改线程时(比如使用线程池时),默认情况下使用进程标识执行新的线程。当新线程需要模拟时,您的应用程序应当将来自原始线程的安全标记(WindowsIdentity.Token 属性)保存为结束线程状态的一部分。

如果启用了模拟,则 ASP.NET 可以模拟从 IIS 收到的已验证标识,或应用程序的 Web.config 文件中指定的已验证标识。配置模拟时有三个选项可供选择:

  • 禁用模拟。这是默认配置。为了与 ASP 后向兼容,必须启用模拟并更改 ASP.NET 进程标识以使用本地系统帐户。在这种情况下,ASP.NET 线程通过使用应用程序辅助进程的进程标记运行,而不管使用 IIS 和 ASP.NET 身份验证的哪种组合。默认情况下,应用程序辅助进程的进程标识为 ASPNET 帐户。有关更多信息,请参见 ASP.NET 进程标识
    <identity impersonate="false" />
  • 启用模拟。在这种情况下,ASP.NET 模拟由 IIS 传递给它的标记,该标记既可以是已经过身份验证的用户也可以是匿名 Internet 用户帐户 (IUSR_machinename)。
    <identity impersonate="true" />
  • 为特定标识启用模拟。在这种情况下,ASP.NET 模拟用 Web.config 文件中指定的标识生成的标记。
    <identity impersonate="true"
              userName="domain\user" 
              password="password" />

如果应用程序驻留在 UNC 共享上,则 ASP.NET 总是模拟 IIS UNC 标记访问该共享,除非使用已配置的帐户。如果提供显式配置的帐户,则 ASP.NET 使用该帐户取代 IIS UNC 标记。

使用模拟时应多加小心,因为它可能让应用程序潜在地使用应用程序设计员未预料的权限处理代码。例如,如果应用程序模拟一个已经过身份验证的 Intranet 用户,则该应用程序在模拟有管理权限的用户时就会具有管理权限。同样地,如果被模拟的用户具有比预期的权限限制性更强的权限,则该用户有可能不能使用该应用程序。

请参见

安全模型 | ASP.NET 模拟

posted on 2005-10-28 16:23  冷月孤峰  阅读(528)  评论(3)    收藏  举报