Asp.net
如何在同一 IIS 7.5 伺服器上為具有不同身份驗證模式的單個 ASP.NET Web 應用程序配置兩個站點
我有一個帶有 IIS 7.5 的 W2K8 伺服器,它託管兩個指向單個 asp.net Web 應用程序的站點。
Web 應用程序已針對錶單身份驗證和集成(Windows)身份驗證進行了配置。loginUrl 設置為為集成身份驗證配置的登錄頁面;如果無法使用 Request.ServerVariables 辨識使用者
$$ “LOGON_USER” $$然後應用程序將使用者重定向到為表單身份驗證配置的登錄頁面。 問題是,當我以匿名使用者身份訪問該站點時,IIS 發出 401 質詢,因此永遠不會執行將使用者重定向到表單登錄頁面的邏輯。有人建議我設置兩個站點並讓它們都指向同一個 Web 應用程序;這裡的問題是 web.config 中的 loginUrl 屬性被任一站點上的更改覆蓋。如何配置兩個站點以使用不同的身份驗證模式?
ASP.NET 不支持同時擁有多個內置身份驗證模組。這在文件中很突出,
<authentication mode="[Windows|Forms|Passport|None]" ...>
解決方案:
- 建構一個處理身份驗證的自定義 IHttpModule。
- 在 IIS 中將您的應用程序分成兩個 Web 應用程序,它們指向具有不同配置文件的兩個不同目錄。這是最簡單的解決方案。
- 在 IIS 中將您的應用程序分成兩個 Web 應用程序,但將它們都指向同一個目錄。您需要從目錄中的 web.config 中刪除身份驗證和模擬設置,並將它們移動到系統範圍的 web.config (%SystemRoot%\Microsoft.NET\Framework64\v4.0.30319\Config\web .config 或類似文件)。這些設置必須由使用IIS 站點名稱的位置標記包裝。
例子:
<location path="My Awesome Site - Forms"> <system.web> <authentication mode="Forms" /> </system.web> </location> <location path="My Awesome Site - Windows"> <system.web> <authentication mode="Windows" /> <identity impersonate="true"/> </system.web> </location>