ASP.NET 授權決定「誰能存取什麼資源」。本文涵蓋角色基礎授權 (RBAC)、URL 授權設定、檔案授權與 NTFS ACL 對應、Permission 物件模型 (代碼存取安全 CAS) 基礎。
IPrincipal.IsInRole(role) 為核心檢查方法。UrlAuthorizationModule)在 web.config 以 <authorization> 區段宣告規則:
<configuration>
<location path="Admin">
<system.web>
<authorization>
<allow roles="Admin" />
<deny users="*" /> <!-- 拒絕所有其他 -->
</authorization>
</system.web>
</location>
</configuration>
allow / deny 屬性:users (逗號分隔、? 匿名、* 所有)、roles、verbs (GET/POST)。<location> 針對特定目錄/檔案設定不同規則。FileAuthorizationModule)<authentication mode="Windows"> 生效。Context.User.Identity (WindowsIdentity) 是否有讀取/執行權限。.NET 將作業系統資源權限 (檔案、登錄、網路、UI 等) 封裝為 CodeAccessPermission 衍生類別:
| Permission 類別 | 保護資源 | 典型用法 |
|---|---|---|
| FileIOPermission | 檔案系統讀寫 | 要求讀取特定目錄 |
| RegistryPermission | 登錄存取 | 讀寫特定機碼 |
| WebPermission | 網路連線 | 連接特定 URI |
| SqlClientPermission | SQL Server 連線 | 資料庫操作 |
| SecurityPermission | 非受控碼、執行緒、主體操作 | 高信任度操作 |
// 聲明式:屬性標註在類別/方法上,載入時檢查
[FileIOPermission(SecurityAction.Demand, Read = @"C:\Data\")]
public class DataService { ... }
// 命令式:程式碼中明確檢查
var perm = new FileIOPermission(FileIOPermissionAccess.Read, @"C:\Data\");
perm.Demand(); // 若無權限拋出 SecurityException
下篇將實戰示範:自訂授權模組、資料列級權限過濾、動態權限載入與快取策略。