IIS7 下经典 ASP 中的经过身份验证的用户模拟

IIS7 下经典 ASP 中的经过身份验证的用户模拟

我最近将我们的一台服务器从 Server 2003 和 IIS6 迁移到了 Server 2008 R2 和 IIS7(技术上应该是 IIS7.5)。在此过程中,我正在转换一个用传统 ASP 编写的小型帐户管理工具,但遇到了用户模拟问题。到目前为止,广泛的搜索并没有太大帮助。

在 IIS6 下,站点配置为模拟登录用户。因此,如果域管理员登录,他可以运行命令来创建用户目录、调整权限等。使用 Procmon,您可以看到以该用户身份执行的进程。这很有效。

但是,在 IIS7 下使用相同的代码,我无法获得此行为。我已启用基本身份验证、禁用匿名身份验证、启用模拟并将应用程序池更改为经典而不是集成流水线。一切似乎都配置正确,但是,经典 ASP 站点启动的所有进程仍继续以默认 AppPool 身份运行,而不是以登录用户身份运行。

如果这很重要,程序将使用如下代码启动:

set Wsh = Server.CreateObject("WScript.Shell")
Wsh.Run("cmd.exe /C mkdir D:\users\foo")

通过 Procmon 监控显示,cmd.exe 根据管道模式作为“Classic .NET AppPool”或“DefaultAppPool”运行。

关于如何让经典 ASP 网站模拟并以经过身份验证的用户身份执行的任何建议都非常好。谢谢!

答案1

有一个鲜为人知的设置叫做 LogonMethod,它可以改变以匿名或纯文本登录的用户帐户的功能。

我(认为我)记得这在 IIS 5 或 6 中发生了变化,因此它可能在 7 中再次发生了变化。其效果正如您所描述的那样 - 无法执行交互式用户可以轻松完成的事情。

为了实现委派而进行全面改变并不是一个好主意 - 毕竟,这就是 Kerberos 约束委派和协议转换的目的 - 但它可能有助于解决这个问题。

LogonMethod - IIS 6 及更早版本属性 -http://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/fa99f59f-d11f-41f7-b220-ad9d433f80b0.mspx?mfr=true

LogonType - 应用程序池的类似属性,接受较少的选项(但服务可能适合您) -http://www.iis.net/ConfigReference/system.applicationHost/applicationPools/add/processModel

哦,而且,这是可能的(尽管您怎么说呢?),您的 WScript 对象不太可能在具有与工作进程不同标识的 COM 容器中运行。

答案2

旧帖子,但也许有人会觉得有用。我在这个问题上苦苦挣扎,找到了解决办法。

如果您需要使用特殊用户运行 .asp 页面(我遇到了日期和货币格式方面的问题),请尝试将指定用户设置为应用程序池中的身份,然后将“加载用户配置文件”设置为 True。这解决了我的问题。

答案3

为什么您没有在 IIS 中启用“集成 Windows 身份验证”?
它是否已在本地登录?
在本地管理员下?

确保:

  • NTLM2 已启用
  • 您更改了默认的 web.config

     <authentication mode="None" />   
    

     <authentication mode="Windows" />  
    

相关内容