【问题标题】:WMI access denied error when query remote computer from ASP.NET从 ASP.NET 查询远程计算机时 WMI 访问被拒绝错误
【发布时间】:2011-01-07 15:57:01
【问题描述】:

我有一个对远程系统执行 WMI 调用的 ASP.NET 应用程序。应用程序 Web.config 包含 选项,据我了解,它们应该强制代表应用程序用户执行应用程序代码。

问题是我收到“访问被拒绝”错误,尽管我可以成功地从同一用户下同一主机上的 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 安全问题?

【问题讨论】:

    标签: asp.net security powershell wmi


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢,委派权限有部分帮助。现在我可以拨打电话了,但是在访问包含 WMI 代码的页面时我必须输入我的凭据。
    • 更新:IE 工作得很好。 Firefox 和 Chrome 的工作方式似乎不同。我猜他们没有提供委托所需的完整 Kerberos 信息。
    • IE 实现了 SPNEGO 身份验证协议 (Kerberos/NTLM),它为您提供单点登录。我不认为 Firefox/Chrome 开箱即用地实现了这一点,所以您可能会看到 NTLM 直通身份验证。这是为 Windows 域中的内部应用程序围绕 IE 进行标准化的原因之一。
    • 如何为您的 Web 服务器启用委派? IIS 7?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-06
    • 1970-01-01
    • 1970-01-01
    • 2011-01-15
    • 2014-06-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多