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

Kir*_*nko 4 asp.net security powershell wmi

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

问题是,尽管我可以成功地从PowerShell控制台在同一用户下的同一主机上的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
Run Code Online (Sandbox Code Playgroud)

转储HttpContext.Current.User.Identity.Name,System.Security.Principal.WindowsIdentity.GetCurrent()。Name,System.Threading.Thread.CurrentPrincipal.Identity.Name属性建议模拟正常工作。

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

DSO*_*DSO 5

您需要让域管理员为您的Web服务器计算机启用委派。这是Kerberos的安全功能。默认情况下,除非被授予委派权限,否则不允许中间服务器(在这种情况下,您的Web服务器)将客户端的模拟上下文传递给远程服务器。如果您不这样做,则远程目标服务器将以匿名用户的身份看到该请求……如果安全性得到适当保护,则将拒绝该访问。

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