簡介:
ASP.NET 中窗體認證是一個功能非常強大的特性,只需要很少的代碼就可以實現一個簡單的平台無關的安全認證系統。
但是,如果你需要一個更復雜更有效的認證機制,那麼你就要把眾多用戶分成用戶群組,以利用它的靈活性。Windows 集成認證提供了這種認證機制,但它使用的是 NTLM,即Windows NT LAN Manager,因而它不是跨平台的。現在越來越多的人使用 Linux 系統,而 Mozilla Forefox 浏覽器用戶也越來越多,我們肯定不能把這些人拒之門外,因此我們尋求另外的認證機制。有兩個選擇:一是為網站劃分多個區域,提供多個登錄頁面,強迫用戶一個一個的去注冊和登錄;二是把用戶分組,並且限制特定用戶組對某頁面或者某區域訪問的權限。後者當然是更好的選擇。通過分配角色給各個用戶,我們能夠實現這種功能。
微軟為.NET平台留下了窗體認證中基於角色的認證機制,但是我們必須自己去實現它。本文力求覆蓋窗體認證中基於角色的認證機制的一些基本的東西,比如它的概念,它的實現,如何在Web應用程序中應用等。
必要准備:
我們首先要建立一個數據庫,一個Web應用項目,幾個不同安全級別的機密目錄,以及幾個ASP.NET頁面。當然你也可以在你現有的Web應用項目中添加這些。
1、創建數據庫
首先要選擇你需要使用的數據庫管理系統 DBMS。本文使用 SQL Server 2000。
在實際應用項目的數據庫中,一般都會有用戶數據表 Users,它可能包括用戶唯一標記:UserID,用戶名:UserName,密碼:Password,用戶的郵件地址:Email,用戶所在城市:City,用戶登錄次數 LoginCount 等。可以通過創建一個 UserInRoles 數據表(一般可以包括兩個字段,用戶名:UserName,用戶角色:UserRoles)來實現為用戶分配角色。
為了簡單,我只創建一個 Users 數據表,它有3個字段,用戶名 UserName,密碼 Password,用戶角色 UserRoles。創建表之前,你要選擇數據庫,或者創建一個新的數據庫。要創建一個新的命名為WebSolution的數據庫 ,只需要簡單的SQL語句:
程序代碼
Create DATABASE WebSolution
GO
要選擇一個叫msdb的數據庫,可以使用SQL語句:
程序代碼
USE msdb
GO
接下來,我們創建剛才提到的 Users 數據表,SQL 腳本如下:
程序代碼
Create TABLE Users
(
UserName nvarchar(100) CONSTRAINT PK_UserName PRIMARY KEY,
Password nvarchar(150),
UserRoles nvarchar(100)
)
可以為這個表創建索引 Credentials,SQL語句如下:
程序代碼
Create INDEX Credentials ON Users
(
UserName,
Password
)