Iis

是否可以僅為 1 個特定域綁定設置基本身份驗證?

  • August 2, 2016

我只想為 1 個域綁定啟用基本身份驗證,並讓其餘的公共訪問。IIS可以做到這一點嗎?

網站的綁定資訊用於確定將傳入請求路由到哪個網站。(通過 Windows 啟動服務和 http.sys)。

對於每個網站,您可以為整個站點或站點中的特定 URL 啟用各種身份驗證方法,但不能基於主機名。

你至少有兩個選擇:

選項一是使用兩個獨立的網站,它們指向同一個物理目錄,並在站點根目錄中使用同一個 web.config。

您仍然可以為這兩個站點使用不同的身份驗證方法。

這裡的缺點是您有兩組日誌文件,並且對配置的某些更改也必須進行兩次。

選項二涉及URL Rewrite 模組

假設您有兩個主機名綁定到站點normal.serverfault.comsecure.serverfault.com.

在站點根目錄下創建一個虛擬目錄secure,但將其指向站點本身的同一物理目錄(與根目錄相同)。

對於虛擬目錄,禁用anonymousAuthentication 並啟用basicAuthentication。

現在向站點添加一個重寫規則:

<rewrite>
 <rules>
     <rule name="Secure">
         <match url=".*" />
         <conditions>
             <add input="{SERVER_NAME}" pattern="^secure\.serverfault\.com$" />
         </conditions>
         <action type="Rewrite" url="/secure/{R:0}" />
     </rule>
 </rules>
</rewrite>

我們正在重寫所有使用secure虛擬目錄的請求,但前提是主機名是secure.serverfault.com

現在使用normal.serverfault.com的使用者仍然可以在沒有身份驗證的情況下訪問該站點,但使用時secure.serverfault.com他們必須登錄。

我在此選項中看到的一個問題是,web.config對於重新編寫的請求,您站點的根目錄中的文件基本上被處理了兩次。

即使它在物理上只存在一次,但在其中執行請求時,\secure\它曾經被視為虛擬目錄的本地目錄,而再次被視為父目錄。所以你必須確保你沒有任何不支持這個的設置。例如<add...節點不能被複製,你必須使用<clear...or<remove...來解決這個問題。或者,您將設置移動到 ApplicationHost.config。

您應該使用此設置測試您的站點,但因為瀏覽器永遠不知道 URL 已被重寫,所以它應該可以正常工作。

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