讀者 sam 問了一個好問題:

參考網路資料在 web.config 加入 <authentication mode="Windows" /> 並使用 IIS 10 管理員停用 Anonymous、啟用 Windows 驗證,可實現 Windows/AD 帳號登入。 但即使不設定 <authentication mode="Windows" />,一樣可以正常執行,何解?

我知道 IIS 管理員的驗證設定與 web.config system.web/authentication 設定是不同的東西,但差異細節又說不出所然,趁著這個機會將相關知識梳理一番。

  1. IIS 啟用停用匿名驗證、Windows 驗證的設定不是儲存在 web.config,而是在 C:\Windows\System32\inetsrv\config\applicationHost.config

    如下圖的 <windowsAuthenticaitaon> 與 <anonymousAuthentication>
  2. ASP.NET 驗證相關設定有兩處:
  3. web.config 裡也有 system.webserver 區段,也能用來設定 IIS 驗證嗎?
    不行,會得到以下錯誤:

    原因是相關設定被設成 overrideModeDefault="Deny",統一在 applicationHost.config 控制,不允許 web.config 覆寫:

    修改 overrideModeDefault 可解除限制,但開放 web.config 設定會降低安全性,不建議。
  4. 為什麼指定 IIS 只開啟 Windows 驗證,不必設 <authentication mode="Windows" /> 也能正常執行?
    因為 <authentication> mode 的預設值是 Windows。(我沒能找到官方文件依據,但有找到參考1參考2) 實測 mode="Windows" 在匿名或 Windows 驗證下都能正常運作。

Explain the difference and relationship between system.webServer/security/authentication and system.web / authentication.


Comments

# by Sam

黑大 您好: 非常感謝您的說明,讓我可以了解整個運作機制,感謝。

Post a comment


50 - 21 =