簡體   English   中英

用戶模擬在 .NET Core 中不起作用

[英]User Impersonation not working in .NET Core

我們有一個 web 應用程序在我們公司的 intr.net 上運行。 當我嘗試訪問我的 MVC controller 中的 a.network 路徑時出現以下錯誤:

對路徑“\Server001\SharedFiles\CA”的訪問被拒絕。

該應用程序托管在 IIS 上,應用程序池設置為 ApplicationPoolIdentity。 我不想使用有權訪問所有目錄的帳戶來設置它。 我希望每個用戶只能訪問他們被允許訪問的文件夾。 經過一些研究,我認為唯一的方法是在需要時以編程方式模擬用戶。 為了對此進行測試,我創建了一個新的 ASP.NET Core 6 MVC 項目,並將身份驗證設置為 Windows(還在 IIS 站點中啟用了 Windows 身份驗證)。 然后我將以下代碼添加到我的 controller 中:

public async Task<IActionResult> Index()
{
    // The user used as Log On as for the Windows Service
    var serviceUser = WindowsIdentity.GetCurrent();
    // returns "IIS APPPOOL\MvcTest"

    // The user to be impersonated
    // COMPANYDOMAIN\MyName
    var userToImpersonate = (WindowsIdentity)HttpContext.User.Identity;

     await WindowsIdentity.RunImpersonatedAsync(userToImpersonate.AccessToken, async () =>
      {
        var ImpersonatedUser = WindowsIdentity.GetCurrent();

        _logger.LogInformation(ImpersonatedUser.ImpersonationLevel.ToString());
        //  returns "impersonate"
        _logger.LogInformation(ImpersonatedUser.Name);
        //  Here we are getting "COMPANYDOMAIN\MyName"

        try
        {
            var files = Directory.GetFiles("\\\\Server001\\SharedFiles\\CA");
            return View(files);
        }
        catch (Exception ex) { }
    });
}

雖然這表明WindowsIdentity.GetCurrent().Name已更改為我的域帳戶(我登錄的帳戶),但由於某種原因它不接受模擬用戶。 我仍然收到拒絕訪問錯誤。 這是權限問題嗎?

我可以使用我的域帳戶 (COMPANYDOMAIN\MyName) 瀏覽“\Server001\SharedFiles”,而且當我將應用程序池標識更改為我的域帳戶時,該應用程序仍然有效。

如果WindowsIdentity.GetCurrent().Name顯示正確的用戶,則您的模擬可能正常工作。

Windows 中的文件共享具有兩組定義用戶可以執行的操作的權限:

  1. 共享權限。 這定義了允許誰遠程訪問該文件夾。 這些設置在您最初設置共享的同一位置。
  2. 文件系統權限。 這些是您會想到的正常文件權限。

確保共享權限和文件系統權限都允許用戶訪問。 文件系統權限可能允許某人完全控制,但共享權限拒絕他們任何訪問。 在這種情況下,他們可以在本地訪問和修改任何文件,但無法通過共享執行任何操作。

我通常會將共享權限設置為對所有人讀/寫,然后使用文件系統權限來限制訪問。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM