Asp.net

ASP.NET 拒絕尊重我的權威。

  • August 5, 2011

我已經成功地模擬了一個使用者。使用 LogonUser 互操作,例如

   [DllImport("advapi32.dll", SetLastError = true)]
   static extern bool LogonUser(
     string principal,
     string authority,
     string password,
     LogonSessionType logonType,
     LogonProvider logonProvider,
     out IntPtr token);

這工作正常。當我轉到即時視窗並輸入WindowsIdentity.GetCurrent().Name時,模擬使用者顯示為我的 CurrentUser。當我釋放這個使用者時,它會回到我的真實使用者。這裡沒有問題——我在冒充

但是,當我嘗試將文件寫入使用者有權訪問的共享時,我得到:

Access to the path [path name] denied..

我已經能夠以我正在模擬、導航並將文件寫入共享的使用者身份手動登錄 Windows。使用者肯定對我要定位的目錄具有管理權限。

我允許最終使用者上傳文件,並使用該HttpPostedFileBase對象將文件寫入此共享。本質上,我將模擬限制為上傳文件的程式碼塊。完成後,它會返回到原始經過身份驗證的 LDAP 使用者,例如

imp = Impersonation.ImpersonateUser("someuser","somepassword");
HttpPostedFileBase hpf = Request.Files[file] as HttpPostedFileBase;
...
hpf.SaveAs(path);
Impersonation.StopImpersonating(imp);

路徑是正確的。

當我使用該SaveAs方法保存文件時,是否尊重我的冒名頂替?

它是否試圖在我不知道的另一個帳戶下寫入文件?如果是這樣,我該如何改變呢?

使用該方法似乎沒有太多的控制SaveAs——沒有一個重載。是否有任何其他替代方法可以讓我更好地控制我的憑據?

這聽起來像是一個雙跳認證問題。您是否嘗試過讓網路共享修改訪問您站點的預設 IIS 使用者(例如 ASPNET)並在沒有模擬程式碼的情況下執行 POST/SaveAs?如果失敗,您應該查看是否在 IIS 中設置了可能導致伺服器躍點身份驗證問題的設置。這裡可能是一個很好的起點:

http://weblogs.asp.net/owscott/archive/2008/08/22/iis-windows-authentication-and-the-double-hop-issue.aspx

您說“將文件寫入此共享”。共享的權限與電腦上文件夾的權限不同。您是否檢查了共享權限?

引用自:https://stackoverflow.com/questions/6878560