我有一个ASP.NET应用程序,它执行对远程系统的WMI调用。应用程序Web.config包含和选项,据我所知,它们应该强制代表应用程序用户执行应用程序代码。
问题是,尽管我可以成功地从同一主机上同一用户下的PowerShell控制台向所讨论的远程服务器执行我的WMI请求,但我还是收到了"Access is denied“错误。
// 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
转储System.Security.Principal.WindowsIdentity.GetCurrent().Name,System.Threading.Thread.CurrentPrincipal.Identity.Name,HttpContext.Current.User.Identity.Name属性表明模拟按预期工作。
想法?这个问题可能是某种.NET或IIS的安全问题吗?
发布于 2011-01-07 18:26:58
您需要让域管理员为您的web服务器计算机启用委派。这是Kerberos的一个安全特性。默认情况下,不允许中间服务器(在这种情况下是您的web服务器)将客户端的模拟上下文传递到远程服务器,除非它已被授予委派权限。如果您不这样做,远程目标服务器将看到以匿名用户身份进入的请求……如果它被适当地保护,将被拒绝访问。
注意:常见的策略是只允许中间服务器委派给特定的目标服务器(称为约束委派),因此如果您的web应用程序需要能够在网络中的任何服务器上调用WMI,您可能会遇到问题。与您的域管理员交谈。
https://stackoverflow.com/questions/4627394
复制相似问题