ASP.NET 安全機制建立在 IIS 之上,形成雙層防護管線。理解「誰是誰」(驗證)與「能做什麼」(授權)在各層級的運作流程,是建構安全 Web 應用的基石。本文系統梳理 IIS → ASP.NET 完整安全管線、三大驗證模式、兩類授權服務、角色型安全,並附 Web.config 關鍵配置實例。
用戶請求 → IIS 接收 (SSL 保護傳輸/驗證伺服器身分) → IIS 驗證 (基本/摘要/整合 Windows/匿名) → IIS 授權 (NTFS ACL / IP 限制) → 傳遞 Windows 權杖給 ASP.NET (匿名則為 IUSR_MACHINE) → ASP.NET 驗證 (Windows / Forms / Passport) → ASP.NET 授權 (FileAuthorization / UrlAuthorization) → 程式碼以特定身分存取資源 (模擬/固定帳號) → 回應資源給用戶
| 模式 | 機制 | 適用場景 | IIS 設定 | Web.config |
|---|---|---|---|---|
| Windows | IIS 驗證 (基本/摘要/NTLM/Kerberos) | 企業內網、AD 環境、單一登入 | 停用匿名、啟用整合 Windows | ` |
| Forms | Cookie 儲存票證,未驗證導向登入頁 | 公開網站、跨平台、自訂登入邏輯 | 啟用匿名 | ` |
| Passport | Microsoft 集中驗證服務 (已棄用) | 跨站單一登入 (歷史遺產) | 啟用匿名 | ` |
<authorization>
<allow roles="Admin" />
<allow users="Alice,Bob" />
<deny users="?" /> <!-- 拒絕匿名 -->
<deny users="*" verbs="POST" /> <!-- 拒絕所有人 POST -->
</authorization>
| 配置 | 說明 |
|---|---|
| ` | ASP.NET 程式碼以請求者身分執行 (需 Windows 驗證) |
| ` | 固定模擬特定帳號 (存取網路資源、資料庫) |
| `WindowsAuthentication_OnAuthenticate` | Global.asax 事件,可附加自訂 `IPrincipal`/`IIdentity` |
| 角色型安全 | `User.IsInRole("Admin")`、`[PrincipalPermission(SecurityAction.Demand, Role="Admin")]` |
掌握雙層管線運作邏輯,能在 Legacy 系統維護與現代架構遷移中遊刃有餘,構建經得起攻擊考驗的安全應用。