2009-09-11 33 views
0

我遇到了(希望)小問題。我有一個用ASP.NET編寫的Web應用程序,它將使用IIS 6.0運行在Windows 2003 Server計算機上。當我在本地運行它時,它完美運行。當我從服務器運行它時,該網站正常工作。問題在於寫入遠程文件夾。我有一個使用應用程序寫入的AD權限的網絡文件夾。使用我的AD帳戶(當我在本地編寫它時),它的身份驗證是正確的,但是當使用IIS帳戶時,它不會。有沒有人遇到過這個?任何解決方案?寫入ASP.NET中的網絡位置(使用AD)

到目前爲止,我已經嘗試使用我的AD帳戶作爲IIS中的「訪客帳戶」,該網站運行,但仍然無法正常工作。

任何想法,解釋或建議將不勝感激!

謝謝。

+1

什麼是運行應用程序池在IIS中的用戶的身份下面的這行?默認用戶(網絡服務)沒有網絡權限,因此無法寫入網絡文件共享。 –

+0

我有可以訪問運行應用程序池的網絡文件夾的域帳戶。 – SlackerCoder

回答

2

我通常處理這些情況的方法是做幾個步驟。

  • 在AD中爲該服務創建一個帳戶。
  • 將此帳戶添加到您希望訪問的網絡共享中。
  • 然後讓您的ASP.Net應用程序使用該服務帳戶而不是本地IIS帳戶運行。
  • 在你的web.config文件你把

    <system.web>
      <identity impersonate="true"/>
    </system.web>

+0

嗯......我有在AD創建的帳戶,我已經添加了共享所需的權限。我將應用程序池用戶從「網絡服務」更改爲新的AD用戶。我也將允許匿名帳戶更改爲AD用戶帳戶。 web.config文件也被更改了。它不會寫出到該文件夾​​。有什麼想法嗎?! – SlackerCoder

+0

那麼確保該設置適用於您的應用,而不是在IIS的頂層。此外,在目錄安全下 - >身份驗證和訪問控制 - >編輯 - 確保已選中集成Windows身份驗證。 – Demetri

+0

還有一件事要確定,就是所有的錯誤都寫出來寫入日誌。通常,當它寫入失敗時,會拋出一些錯誤信息,這可能會有所幫助。 – Demetri

0

可能與應用程序池正在運行的帳戶有關嗎?

3

默認情況下,ASP.NET在本地用戶帳戶的上下文中運行,該帳戶無法訪問您的AD計算機。您可以將連接池重新配置爲以域帳戶運行,並可以訪問。您應該儘可能少地授予域帳戶的權限,並將其添加到IIS計算機上的IIS_WPG,並將其作爲該框上的服務權限運行。

0

您也可以考慮這樣做在這個建議的SO回答:

ASP.NET Windows Authentication Impersonate Problem

裹的代碼是做寫作到遠程位置和其他一切可以單獨留在家中。這將爲您提供最佳的網絡應用程序安全性,因爲您只需爲這些需要它的代碼模擬一個帳戶,而不是全部。

+0

看到這是我的答案...... *咧嘴*如果可能,我不會這樣做,因爲(a)它不會在這種情況下工作,並且(b)使它工作,您需要硬編碼切換上下文的域帳戶的用戶名和密碼。哪個不好。 – blowdart

+0

@blowdart - 我錯過了一些然後....爲什麼它不工作? – klabranche

+0

那麼該答案中的模仿需要Windows驗證,被問到的人說他將其切換到測試,而不是它是一個永久設置 – blowdart