首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> ASP.NET 基礎 >> 關於ASP.NET

ASP.NET 身分驗證與授權完整架構:從 IIS 到 ASP.NET 的安全管線深度解析

     編輯:關於ASP.NET

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)
  → 程式碼以特定身分存取資源 (模擬/固定帳號)
  → 回應資源給用戶

ASP.NET 三大驗證模式

模式機制適用場景IIS 設定Web.config
WindowsIIS 驗證 (基本/摘要/NTLM/Kerberos)企業內網、AD 環境、單一登入停用匿名、啟用整合 Windows``
FormsCookie 儲存票證,未驗證導向登入頁公開網站、跨平台、自訂登入邏輯啟用匿名`...`
PassportMicrosoft 集中驗證服務 (已棄用)跨站單一登入 (歷史遺產)啟用匿名``

兩類授權服務

  1. 檔案授權:`FileAuthorizationModule` 檢查實體檔案 `.aspx`、`.asmx` 的 NTFS ACL,適用 Windows 驗證
  2. URL 授權:`UrlAuthorizationModule` 依 URL 路徑規則(非實體檔案),支援 `users`、`roles`、`verbs` (GET/POST),適用 Forms/Passport/自訂主體

URL 授權配置實例

<authorization>
  <allow roles="Admin" />
  <allow users="Alice,Bob" />
  <deny users="?" /> <!-- 拒絕匿名 -->
  <deny users="*" verbs="POST" /> <!-- 拒絕所有人 POST -->
</authorization>
  • 規則**由上而下**第一個符合生效
  • `?` = 匿名用戶,`*` = 所有用戶
  • 可放在子目錄 `web.config` 實現細粒度控制

關鍵配置細節

配置說明
``ASP.NET 程式碼以請求者身分執行 (需 Windows 驗證)
``固定模擬特定帳號 (存取網路資源、資料庫)
`WindowsAuthentication_OnAuthenticate`Global.asax 事件,可附加自訂 `IPrincipal`/`IIdentity`
角色型安全`User.IsInRole("Admin")`、`[PrincipalPermission(SecurityAction.Demand, Role="Admin")]`

常見誤區與最佳實踐

  1. 混淆 IIS 與 ASP.NET 驗證層級:匿名存取網站 ≠ ASP.NET 不驗證,兩者獨立配置
  2. Passport 已淘汰:現代跨站登入請用 OAuth 2.0 / OpenID Connect (IdentityServer, Azure AD, Auth0)
  3. URL 授權不保護靜態檔案:`.jpg`、`.css` 需 IIS 處理或映射至 ASP.NET
  4. 避免在 `web.config` 明文存密碼:使用 `aspnet_regiis -pef` 加密 `connectionStrings`/`identity` 區段
  5. 最小權限原則:應用程式池身分識別用 `ApplicationPoolIdentity`,資料庫連線用最低權限帳號

現代化架構演進

  • ASP.NET Core:統一中介軟體管線 `UseAuthentication` / `UseAuthorization`
  • Policy-based 授權:`[Authorize(Policy="RequireAdmin")]` 替代角色檢查
  • JWT Bearer Token 取代 Forms Cookie,支援無狀態微服務
  • IdentityServer / Azure AD B2C 提供標準化身分提供者

掌握雙層管線運作邏輯,能在 Legacy 系統維護與現代架構遷移中遊刃有餘,構建經得起攻擊考驗的安全應用。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved