時楓棋 黃海濤 陳軍偉
摘 要:網站的一個典型要求是,只允許某些用戶(經過身份驗證的用戶)查看特定的頁面。基于角色的訪問控制策略(RBAC)通過在用戶和權限之間引入角色,彌補了傳統方法的某些缺陷。傳統的訪問控制需要程序員編寫大量代碼來實現,使用ASP.NET MVC3提供的角色管理,可以快速建立起健壯,功能強大的基于角色的訪問控制。
關鍵詞:ASP.NET;MVC;基于角色的訪問控制;WEB安全
在基于Web的信息系統中,由于網絡信息共享的特性,系統的安全問題越來越突出,安全性研究越來越重要,對用戶訪問進行控制是保證系統安全的重要措施之一。以往在對Internet開放的網站上設計實現一個用戶權限控制管理系統通常都要花費很多的時間。ASP.NET MVC3內置了基于角色的訪問控制模塊,實現基于窗體的用戶身份驗證和權限控制功能,這里淺析其實現方式。
1 Forms身份驗證的原理
ASP.NET在Internet上的應用程序廣泛采用Forms身份驗證方式。由于HTTP協議是無狀態的,WEB服務器每次在處理請求時,都會按照用戶所訪問的資源所對應的處理代碼,從頭到尾執行一遍,然后輸出響應內容,WEB服務器不會記住已處理了哪些用戶的請求。
雖然HTTP協議是無狀態的,我們的業務需求卻要求WEB服務器能夠記住用戶的身份,驗證用戶的權限。這通常是通過Cookie或者Session來實現,他們都可以保存用戶的身份憑據,在不同的HTTP請求之間維持狀態。Forms身份驗證也是通過這兩種方式來實現,既可以讀取用戶瀏覽器中加密存儲的Cookie,在瀏覽器不支持Cookie的情況下也可以使用SessionID來實現身份驗證。只需要在Web.config文件中簡單配置即可。
用戶身份驗證是用戶權限控制的基礎。
2 ASP.NET MVC3基于角色的權限控制
ASP.NET MVC3提供了幾個關鍵類來管理用戶驗證與授權功能
Membership集中了用戶賬戶的創建、刪除,密碼的重置與修改等與用戶賬戶密切相關的功能。
Roles將用戶與角色聯系在一起,一個用戶可以屬于多個角色,以此來對用戶進行不同的授權。
Profiles用來存儲用戶的任意個人數據,如用戶的昵稱、偏好等數據。
以上關鍵類提供的功能,其具體實現只需要在Web.config文件中配置成微軟提供給我們的提供者(Provider)即可。
這充分體現了面向對象思想的針對接口編程的特點,我們可以編寫自己的Provider來替換掉默認的Provider從而實現功能擴展。微軟提供的默認實現可以很好的工作在大部分場景中,而且如果將來有必要升級到自己的方案,也無需對程序做出大量改動。
XML格式的配置文件清晰易讀,并且提供了豐富的配置選項,可以方便的設置密碼最小長度,密碼最大錯誤次數,是否允許找回密碼、是否允許重置密碼等多種參數。
3 將權限控制與MVC架構結合
不同于ASP.NET WEB應用程序,在MVC3架構下,URL與物理頁面之間不再存在一一對應關系。MVC3架構中URL要首先經過路由(Router)處理,分析之后通過路由規則匹配到對應的Controller,由Controller負責呈現頁面。而路由規則是可以經常變化的。以往在ASP.NET WEB應用程序中對頁面設置訪問權限的辦法已經不再適用。所以我們現在使用過濾器(Filter)來給用戶授權。
最常用的權限過濾器是[Authorize],用于Controller類或者Controller方法上,表示此類中的所有方法或者某個方法只有通過驗證的用戶才能調用。加入參數之后如[Authorize(Roles=”Admin”)]表示只有屬于Admin用戶組的用戶才可以調用此方法。Authorize過濾器可以被繼承,方便開發者編寫自己的授權方法。使用過濾器來進行訪問控制是AOP編程在WEB開發中的經典模型。
4 結語
ASP.NET MVC3向廣大開發者提供了不用編寫復雜代碼就可以使用的功能全面的基于角色的用戶訪問控制方案。這套方案的擴展性也相當好,如果掌握了自定義Provider和Filter的編寫方法,完全可以實現更多的高級功能,滿足各種業務場景的需要。
[參考文獻]
[1]Adam Freeman,Steven Sanderson. Pro ASP.NET MVC3 Framework Third Edition,Apress,2011.