从ASP.NET查询远程计算机时WMI访问被拒绝错误

时间:2011-01-07 15:57:02

标签: asp.net security powershell wmi

我有一个ASP.NET应用程序,它执行对远程系统的WMI调用。应用程序Web.config包含< identity impersonate =“true”>和< authentication mode =“Windows”>据我所知,这些选项应该强制代表应用程序用户执行应用程序代码。

问题是我得到“访问被拒绝”错误,尽管我可以在相同用户下的同一主机上从PowerShell控制台成功执行我的WMI请求到相关远程服务器。

// this doesn't work
ManagementScope scope = new ManagementScope();
scope.Path.NamespacePath = "root\\virtualization";
scope.Path.Server = "vs01";
scope.Connect(); // <-- here comes exception

# this works just fine
Get-WmiObject -Namespace 'root\virtualization' -Class Msvm_ComputerSystem -ComputerName vs01

转储HttpContext.Current.User.Identity.Name,System.Security.Principal.WindowsIdentity.GetCurrent()。Name,System.Threading.Thread.CurrentPrincipal.Identity.Name属性表明模拟按预期工作。

想法?问题可能是某种.NET或IIS安全性吗?

1 个答案:

答案 0 :(得分:4)

您需要为您的Web服务器计算机启用域管理员启用委派。这是Kerberos的安全功能。默认情况下,不允许中间服务器(在本例中为Web服务器)将客户端的模拟上下文传递给远程服务器,除非已获得委派权限。如果您不这样做,远程目标服务器将看到以匿名用户身份进入的请求...如果其被正确保护将被拒绝访问。

请注意,它是一个通用策略,只允许中间服务器委派给特定目标服务器(称为约束委派),因此,如果您的Web应用程序需要能够在网络中的任何服务器上调用WMI,则可能会遇到问题。与您的域管理员联系。