讀者 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

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

# by NS

我想詢問 已設定 IIS Basic Authentication 基本驗證,關閉匿名驗證。 在電腦 Windows Chrome 跟 Android Chrome 測試都可以正常輸入並使用。 但在 Android LINE APP 上面都會變成 401 未經授權 他不會跳問帳號密碼的畫面 想詢問是不是 LINE APP 的瀏覽器都完全不支援 Basic Authentication 導致的? 此況如果真的需要登入驗證但再 LINE APP 上面的瀏覽器都無效,是不是只能後端寫程式去處理?(例如改成去寫 LINE Login 去驗證....?)

# by Jeffrey

to NS, 我沒查到 LINE App 或 Android 內嵌瀏覽器是否支援 Basic Authentication 的資料,但 Basic Authentication 因為在 Header 使用未加密的 Base64 編碼傳送帳號密碼普遍被認為不安全,若非高度要求向前相容,是很有可能不支援。

# by NS

to Jeffrey 了解,謝謝。 後來我們改用 URL 加上參數 ?openExternalBrowser=1 的方式,讓 LINE APP 點下去會去外面看其他瀏覽器 APP。 迴避 LINE APP 內部瀏覽器不支援驗證的問題

# by alonso

感謝大大的好文章 讓我收穫真的很多....

Post a comment


92 - 0 =