Asp.net
ASP.NET 拒絕尊重我的權威。
我已經成功地模擬了一個使用者。使用 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 中設置了可能導致伺服器躍點身份驗證問題的設置。這裡可能是一個很好的起點:
您說“將文件寫入此共享”。共享的權限與電腦上文件夾的權限不同。您是否檢查了共享權限?