是否可以僅為 1 個特定域綁定設置基本身份驗證?
我只想為 1 個域綁定啟用基本身份驗證,並讓其餘的公共訪問。IIS可以做到這一點嗎?
網站的綁定資訊用於確定將傳入請求路由到哪個網站。(通過 Windows 啟動服務和 http.sys)。
對於每個網站,您可以為整個站點或站點中的特定 URL 啟用各種身份驗證方法,但不能基於主機名。
你至少有兩個選擇:
選項一是使用兩個獨立的網站,它們指向同一個物理目錄,並在站點根目錄中使用同一個 web.config。
您仍然可以為這兩個站點使用不同的身份驗證方法。
這裡的缺點是您有兩組日誌文件,並且對配置的某些更改也必須進行兩次。
選項二涉及URL Rewrite 模組
假設您有兩個主機名綁定到站點
normal.serverfault.com
和secure.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 已被重寫,所以它應該可以正常工作。