5

我有一個現有的ASP.NET應用程序,它實現了整個窗體身份驗證。該應用程序部署在多個實例中(例如,customer1,customer2,test,dev等),每個實例具有單獨的數據庫。 SSL正在發揮作用。實例配置通過XML配置文件。窗體身份驗證應用程序中的ASP.NET Web服務

我有一個新的要求,允許上傳/下載某些數據,我希望將其作爲公共Web服務來實現。

我最初的想法是選擇性地禁用應用程序的子目錄(例如〜/ Services)的表單認證,然後通過SOAP頭或類似的方法進行認證。

但是,我沒有找到一種方法來選擇性地禁用窗體身份驗證。

問:有沒有辦法做到這一點?我試過<位置>在web配置標記無濟於事。

如果不是的話,你有什麼建議如何設置?我可以考慮以下選項:

1)在我的解決方案中創建一個新的「Services」項目,然後在每個實例的該目錄中配置一個單獨的IIS ASP.NET應用程序。 (Pro:輕鬆訪問實例配置,這可能在未來需要Con:每個相關實例的配置負擔)。

2)創建一個單獨的「服務」解決方案,從應用程序解決方案中引用需要的程序集,並將其作爲獨立的ASP.NET應用程序託管。然後,根據SOAP Header中提供的用戶名查找數據庫連接字符串。 (Pro:在IIS中配置單個應用程序Con:不能輕鬆訪問實例配置)

3)??

說明:我在這裏看到了答案:Override ASP.NET forms authentication for a single page,但是使用位置標記並沒有幫助(Web服務的請求仍然被重定向)。在我的web.config的有關部分是這樣的:

<system.web> 
    <authentication mode="Forms"> 
    <forms loginUrl="Login.aspx"/> 
    </authentication> 
    <authorization> 
    <deny users="?"/> 
    <allow users="*"/> 
    </authorization> 
</system.web> 

<location path="~/Services/MyService.asmx"> 
    <system.web> 
    <authentication mode="None" /> 
    <authorization> 
     <allow users="*" /> 
    </authorization> 
    </system.web> 
</location> 
+3

每當我在web.config中使用位置標記時,路徑的形式是「Services/MyService.asmx」,而不是「〜/ Services/MyService.asmx」它沒有波浪斜線? – 2009-07-12 23:37:51

+0

就是這樣。我可以發誓我曾嘗試過3種不同的版本。這一次,我關閉了瀏覽器,您的解決方案完美運行。 – dividius 2009-07-12 23:45:33

回答

4

我覺得位置標籤會的工作,在那裏你指定服務文件夾,並允許所有用戶,是這樣的:

<location path="services"> 
     <system.web> 
     <authorization> 
      <allow users="*"/> 
     </authorization> 
     </system.web> 
</location> 

但你說沒有工作,你有沒有嘗試在services文件夾中放置一個web.config文件,並禁用表單身份驗證並允許該文件中的所有用戶?

0

您還可以在訪問控制設置爲匿名的情況下在services文件夾中有一個(覆蓋)web.config文件。

0

對我而言,我的工作就是允許用戶在我的webservices所在的文件夾中訪問所有用戶。 首先,我在該文件夾中添加了一個配置文件,並在下面插入了代碼以允許所有用戶。

<authorization> 
     <allow users="*"/> 
     </authorization> 
    </system.web> 
相關問題