我正在工作的幾個asp.net頁面駐留的是一個巨大的intranet應用程序,intranet應用程序池作爲身份運行NetworkService
(不要問)&使用匿名身份驗證作爲IUSR - IIS7。IIS7 - 拒絕訪問使用System.IO.StreamWriter()ASP.net頁面寫入共享
假設內網主目錄是D:\Intranet\
- 有關asp.net頁面駐留在D:\Intranet\TimeSheets\V2\
在質疑我的測試腳本是D:\Intranet\TimeSheets\V2\Post.aspx
並執行這些方針的東西(需要發佈HTML [爲基地64串]) - 轉換爲HTML然後試圖寫入到網絡共享:
Dim TimeSheetInBase64 As String = Request.Form("HtmlToSave")
Dim HtmlToSave As String = ""
Dim SavePath As String = "\\DifferentFileServer\Public\Random Department\Posted Invoices\"
'#### Convert the HTML from base64 back into HTML
Try
Dim decodedBytes As Byte()
decodedBytes = Convert.FromBase64String(TimeSheetInBase64)
HtmlToSave = Encoding.Default.GetString(decodedBytes)
Catch e As Exception
echo("Error decoding HTML: " & e.Message)
Exit Select
End Try
Try
Dim objWriter As New System.IO.StreamWriter(SavePath & "text.htm", False)
objWriter.WriteLine(HtmlToSave)
objWriter.Close()
echo("OK")
Catch ex As Exception
Dim wi As WindowsIdentity = System.Security.Principal.WindowsIdentity.GetCurrent()
Dim user As String = wi.Name
echo("Error Saving Invoice To Disk (" & wi.Name & "): " & ex.Message)
End Try
的objWriter拋出試圖將文件寫入到遠程共享時的誤差:
Error Saving Invoice To Disk (NT AUTHORITY\NETWORK SERVICE): Access to the path '\\DifferentFileServer\Public\Random Department\Posted Invoices\text.htm' is denied.
顯然這是因爲所涉及的頁面在應用程序池的範圍內運行。
所以,我試圖改變V2文件夾上的匿名特定用戶以使用具有對有問題共享的寫入訪問權限的AD帳戶 - 但是,即使在保存配置更改後重新啓動IIS,頁面仍然會拒絕訪問嘗試寫入文件時出錯(和WindowsIdentity.GetCurrent()仍然返回NT AUTHORITY \ NETWORK SERVICE(這是應用程序池的標識,而不是我爲匿名訪問設置的帳戶)
只是爲了確認這一點重寫匿名帳戶的問題,我設置了應用程序池作爲我試圖使用匿名特定用戶的AD帳戶運行 - 這工作正常,文件成功寫入遠程共享 - 所以憑據很好,它只是IIS沒有使用它們正常。
我的問題是這樣的,是否有可能爲匿名用戶使用不同的Windows憑據運行一些子文件夾?如果是這樣,除了更改匿名帳戶之外,還需要做些什麼,因爲這似乎沒有效果?
我的第二個問題是:不是依靠IIS來提升權限,有沒有什麼辦法可以在asp.net頁面內執行此操作,即使用不同的憑據從該頁面運行的不同憑據編寫文件? 我想過把這個子文件夾移動到它自己的應用程序池中 - 但是這看起來有點亂,我想盡可能避免這樣做。
(對不起,文字的牆)