2009-09-30 100 views
0

我在Windows 2003 Server上有一個ASP.NET網站,需要從網絡共享中訪問文件。網絡共享受密碼保護,需要提供用戶名和密碼。ASP.NET從密碼保護網絡中讀取文件共享

我在網站上使用基於表單的身份驗證,而不是基於Windows。

所以我的問題是,當我嘗試使用下面的代碼從networkshare中讀取任何文件時,它會拋出訪問被拒絕的錯誤信息 DirectoryInfo networkShare = new DirectoryInfo(「\\ TestServer \ Share」);

所以我嘗試使用模擬器提供網絡共享的用戶名和密碼到impersonate函數調用,但是調用顯然失敗,因爲該用戶名不存在於ASP.NET Web服務器上。因此,我傳遞了Web服務器上存在的登錄名的用戶名和密碼,所以這次impersonate調用可以工作,但它仍然無法訪問網絡共享,因爲網絡共享用戶名和密碼不同。

最後,我在與網絡共享匹配的網絡服務器上創建了完全相同的用戶名/密碼。這次模擬函數調用起作用,網絡共享也起作用。我能夠成功地從共享中讀取。

所以我的問題是,有沒有一種方法可以讀取網絡共享,而無需在網絡服務器中添加用戶名。 '每當網絡共享登錄更改時,我必須再次在Web服務器中創建一個新用戶名。哪個不理想。

任何想法?

回答

2

「正確」的方式做,這是運行Web服務器的應用程序池爲可以訪問共享的身份。這樣,唯一的憑證存儲安全地在IIS配置中完成(而不是在您的代碼或可讀配置文件中)。將網絡服務器和文件服務器放在同一個Windows域(或者具有不同信任的域)是最簡單的方法,但是「相同的用戶名/密碼」也應該在那裏工作。

如果您不關心在您的代碼或配置中放入用戶名/密碼,您可以P/Invoke到WNetAddConnection2並通過用戶名/密碼 - 那麼你應該能夠訪問共享。這並不要求網絡服務器有一個匹配的帳戶,但你確實應該保護密碼(查看加密註冊表存儲的System.Security.Cryptography.ProtectedData)。

+0

因此,我們需要在兩臺服務器上都有理想的用戶名/密碼,對吧?我正在尋找一些不需要我在Web服務器上創建用戶名的東西。謝謝。 順便說一句,我的網絡共享是在FEDORA而不是Windows服務器,不知道這是否有任何區別。 – ace 2009-09-30 05:26:18

+0

對不起,你原來的帖子並不清楚 - 如果你不關心存儲其他服務器的用戶名/密碼,我添加了一些應該工作的東西。 – nitzmahone 2009-09-30 17:07:05

+0

哇...看起來像我的問題的解決方案...我會嘗試讓你知道它是否工作。感謝的人... 我想加密網絡登錄和存儲在數據庫服務器上,所以我想它應該沒問題。 – ace 2009-10-01 02:42:36

0

試試這個

WebRequest request = WebRequest.Create("http://server/file.xml"); 
request.PreAuthenticate = true; 
request.Credentials = new NetworkCredential("user", "pass"); 

request.GetResponse(); 
+0

我需要從網絡共享文件夾中獲取所有文件的列表,並將所有文件複製到網絡服務器,這將有可能與上述aproach?謝謝。 – ace 2009-09-30 05:22:54