2016-02-05 44 views
0

我想從WCF Web服務的網絡路徑上創建一個目錄。此Web服務託管在使用Windows身份驗證的站點下。但是,當我嘗試使用「Directory.Create」創建文件夾時,我得到一個拒絕訪問。當我檢查「HttpContext.Current.User.Identity.Name」時,我可以看到我自己的用戶帳戶,但我想這不是用來創建文件夾的那個,因爲當我執行「System.Environment.UserName」時,我看到另一個價值。ASP.NET使用當前用戶權限創建目錄

我試圖把「<identity impersonate="true" />」放在網站的主web.config中,但之後沒有任何工作了。

所以我的問題是,是否有可能使用當前登錄的用戶的權限創建目錄?

作爲一個精度,我通過AngularJS調用webservice,並且配置了我的「$ httpProvider」來傳遞憑據(「$hp.defaults.withCredentials = true;」)。

編輯:

我補充說:「<identity impersonate="true" />」放置包含我的web服務,現在該文件夾中的web.config文件,「System.Environment.UserName」包含了正確的憑據,但仍然,我猜訪問被拒絕。我從控制檯應用程序嘗試了相同的命令並且它可以工作。我真的不明白......

EDIT 2

如果我改變了「身份」元素「<identity impersonate="true" username="USERNAME" password="PASSWORD" />」,那麼它的工作原理,但我不想以填補這些領域。 ..

感謝

回答

0

我假設網絡文件夾是另一臺服務器上,你要麼不得不冒充憑證訪問,或誰的應用程序池正在運行,這將需要寫入權限到該文件夾​​。

我們通常將應用程序池作爲IIS中的域帳戶運行。你可以根據你的需要量身定製權限(假設兩臺服務器都在同一個域上,並且不需要以這種方式存儲密碼,管理你的IIS的人就可以處理)。如果網站只需要寫入(但不能讀取),則可以給它寫入權限但不能讀取。

+0

如果它不能解決這類問題,那麼編寫「'」的目的是什麼? – ssougnez

+0

這應該是從IIS傳遞身份。爲了確保您的代碼正在以這種方式運行,我會將一個文件寫入網站(如果它具有權限)並檢查該文件的所有者是誰(因爲該所有者將與其嘗試寫入該文件的人員相同網絡共享)。如果你看到類似「網絡服務」或「iusr_blablabla」的東西,那麼我們知道有些東西出了問題,但至少它給了我們一個方向看。 –

+0

請查閱此處的文檔:https://msdn.microsoft.com/en-us/library/aa292118(v=vs.71).aspx在底部有一個blob,其中顯示「如果應用程序駐留在UNC共享,ASP.NET始終模仿IIS UNC令牌訪問該共享,除非使用配置的帳戶。如果您提供明確配置的帳戶,ASP.NET將優先使用該帳戶而不是IIS UNC令牌。「這將解釋你所看到的行爲。 –