Asp.net

如何在同一 IIS 7.5 伺服器上為具有不同身份驗證模式的單個 ASP.NET Web 應用程序配置兩個站點

  • January 26, 2017

我有一個帶有 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>

引用自:https://serverfault.com/questions/338607