簡體   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