【问题标题】:Access is Denied when connecting to remote computer using WMI from app under IIS使用 WMI 从 IIS 下的应用程序连接到远程计算机时拒绝访问
【发布时间】:2016-01-12 12:53:24
【问题描述】:

当我尝试通过 IIS (10.0) 使用 WMI 连接到远程服务器时,我收到 Access is denied 异常。相同的代码通过 Visual Studio 2015 调试 (IIS Express) 可以正常工作。显然这是一个权限问题,但我找不到任何明确的甚至暗示解决此问题的最佳方法。

在我的示例中,客户端只需使用有效负载中的凭据对 Web 服务进行 POST 调用。然后该服务尝试建立 WMI 连接以获取异常。远程服务器不在域中,并且已验证凭据可以访问给定的命名空间。

我正在运行 IIS 10,但已将其复制到低至 IIS 7 的版本。

感谢任何帮助!

public ManagementScope Connect(Credentials creds, string path)
    {
        _creds = creds;
        _path = path;

        var conOpt = new ConnectionOptions
        {
            Impersonation = ImpersonationLevel.Impersonate,
            Authentication = AuthenticationLevel.PacketPrivacy,
            EnablePrivileges = true,
            Username = _creds.Username,
            Password = _creds.Password,
            //Authority = $"ntlmdomain:{_creds.Domain}"
        };
        // virtualization\v2
        _scope = new ManagementScope($@"\\{_creds.Server}\ROOT\{path}", conOpt);
        _scope.Connect();

        return _scope;
    }

【问题讨论】:

    标签: c# asp.net iis wmi iis-express


    【解决方案1】:

    由于可能缺乏安全性,我始终建议避免在 IIS 上的应用程序中调用 WMI。

    我建议创建一个本地 Windows 服务作为命令中继。 因此,您将调用本地服务,该服务将执行远程 WMI 调用。然后,Windows 服务需要权限才能在远程机器上执行 WMI 命令,而您不必更改 Web 应用程序环境的权限。

    正如信息:在 Azure 等其他平台上,不允许更改 WebApp 的安全设置。服务/中继方式也可以解决这个要求。

    【讨论】:

    • 我想知道权限问题会有多深。我很高兴你谈到了 Azure,因为这最终会结束。我熟悉 Windows 服务,并且我理解您将服务作为命令中继的意思,我只是不确定这在实现方面是什么样的。你能给我举一个简单的例子或解释一下吗?谢谢!
    • Azure Web 应用在 sand box like environment 中运行。您不能更改对应用程序池标识进行任何更改。对于服务:只需使用 WebAPI 或其他东西创建 Windows 服务,并通过 WebApplication 和 Windows 服务的 HTTP(S) 创建(安全)通信,并让 WIndows 服务与远程内容通信。工作流程:WebApp > Windows 服务 > WMI 远程 > Windows 服务 > WebApp。另一个专业人士:您可以非常轻松地替换 Windows 服务。
    • 我实现了一个托管在 Windows 服务中的 ServiceStack 服务。添加了运行服务的适当凭据,它就像一个魅力,我喜欢切换托管机制的能力。谢谢本!
    【解决方案2】:

    一个常见的误解是 IIS Express 就是 IIS。没有。

    IIS Express 在您的帐户下执行代码。这意味着如果您的帐户具有必要的权限,则代码运行良好。

    但是,IIS 纯粹是一种托管服务,您的代码在工作进程标识(即应用程序池标识)下运行。查看您的 IIS 设置以了解我的意思。

    只有当您将该身份更改为另一个合适的身份或授予帐户必要的权限后,该代码才能工作。

    请注意,网络应用不应执行此类需要大量额外权限的任务,否则它们可能会受到损害并导致严重的安全问题。这就是为什么另一个答案建议您将 WMI 调用移至专用 Windows 服务。

    几个月前我有一篇博文,

    https://blog.lextudio.com/2015/04/web-application-differences-in-visual-studio-and-iis/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-05
      • 2017-10-29
      • 2014-09-22
      • 2011-01-15
      相关资源
      最近更新 更多