繁体   English   中英

在IIS下使用WMI从应用程序连接到远程计算机时,访问被拒绝

[英]Access is Denied when connecting to remote computer using WMI from app under IIS

当我尝试通过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;
    }

由于可能缺乏安全性,我总是建议避免在IIS上的应用程序内部进行WMI调用。

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

就像信息一样:在Azure等其他平台上,您不能更改WebApp的安全设置。 服务/中继方式也可以解决该要求。

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

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

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

仅当您将该标识更改为另一个合适的标识或授予该帐户必要的权限时,该代码才能起作用。

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

几个月前我有一篇博客文章,

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM