即:使用 Membership 類 + FormsAuthentication 一起使用以建立的使用者管理與認證的系統。
當然這兩部分都可以單獨使用,今天先著重後者,至於前者,我下一篇隨筆將會寫到。
ASP.NET 中提供了多種認證方式,比如大名鼎鼎的Windows 身分識別驗證
Windows 身分識別驗證模式根據 IIS 所提供的憑據將當前 User 屬性值設定為 WindowsIdentity,但它不修改提供給作業系統的 Windows 標識。提供給作業系統的 Windows 標識用於進行許可權檢查(如 NTFS 檔案許可權檢查)或者用於使用整合式安全性串連到資料庫。預設情況下,此 Windows 標識是 ASP.NET 進程的標識。在 Microsoft Windows 2000 和 Windows XP Professional 上,此標識是 ASP.NET 輔助進程的標識,即本地 ASPNET 帳戶。在 Windows Server 2003 上,此標識是 ASP.NET 應用程式所屬的 IIS 應用程式集區的標識。預設情況下,此標識是 NETWORK SERVICE 帳戶。
通過啟用類比功能,可以將 ASP.NET 應用程式的 Windows 標識配置為 IIS 所提供的 Windows 標識。也就是說,指示 ASP.NET 應用程式類比 IIS 為 Windows 作業系統驗證的所有任務(包括檔案和網路訪問)提供的標識。(解釋來自MSDN Library)
還有一種常有的認證即是 Forms 身分識別驗證
Forms 身分識別驗證使不要求 Windows 身分識別驗證的 Web 應用程式可以進行使用者和密碼驗證。使用 Forms 身分識別驗證時,使用者資訊儲存在外部資料源中,例如Member 資料庫,或儲存在應用程式的設定檔中。在使用者通過身分識別驗證後,Forms 身分識別驗證即會在 Cookie 或 URL 中維護一個身分識別驗證票證,這樣已通過身分識別驗證的使用者就無需在每次請求時都提供憑據了。
這樣一來就方便也安全了,那具體怎麼完成Forms身份認證的設定呢?
首先開啟設定檔web.config
找到<system.web>節點下的 <authentication> 和 <authorization>節點加入
<system.web>
<authentication mode="Forms">
<forms loginUrl="login.aspx" />
</authentication>
<authorization>
<deny users="?" />
</authorization>
<authentication>節點是設定認證方式,這裡我們制定 Forms
<forms>節點內的屬性可以制定 認證頁面(登入頁面)、預設頁面、是否使用cookie、認證逾時時間等等。
這裡我們只指定認證頁面 loginUrl="login.aspx"
<authorization> 節點是認證節點
<deny> 是否認節點 指定屬性 users="?"即為未經過認證的人都需要去認證頁面進行認證
與之對應的是<allow>允許節點
這樣一來思路就清晰了,無論使用者訪問什麼頁面伺服器會判斷使用者是否通過認證,如果沒有轉到認證頁面。
下一步將要確定在login.aspx.cs檔案中如何完成我們認證工作了
public void Login_OnClick(object sender, EventArgs args)
{
if (BLL.CheckLogin(this.Txbusername.Text,this.Txbuserpwd.Text ))
FormsAuthentication.RedirectFromLoginPage(UsernameTextbox.Text,NotPublicCheckBox.Checked);
else
Msg.Text = "Login failed. Please check your user name and password and try again.";
}
這裡的CheckLogin(使用者名稱,密碼) 方法是在邏輯層使用的驗證使用者是否合法的方法
當然如果用 Membership類繼承的一些驗證方法會更簡單,但是在此不詳細說明了。
FormsAuthentication 類(終於提到主人公了),它所屬的命名空間為 System.Web.Security;
FormsAuthentication 是用來設定認證的類,如果使用者合法,把使用者名稱儲存在cookie中,之後使用者再次訪問或訪問其他頁面都無需再次認證
它內部的常用方法有
RedirectFromLoginPage(使用者名稱(string),是否把使用者名稱長期儲存在coolie中(bool))
將經過身分識別驗證的使用者重新導向回最初請求的 URL 或預設 URL
SetAuthCookie(使用者名稱(string),是否把使用者名稱長期儲存在coolie中(bool))
為提供的使用者名稱建立一個身分識別驗證票證,並將其添加到響應的 Cookie 集合或 URL
等等 方法很多,不詳細列出了。
具體的使用或者深入的挖掘希望各位自己去探索了