|
當(dāng)然這兩部分都可以單獨(dú)使用,今天先著重后者,至于前者,我下一篇隨筆將會(huì)寫到。
ASP.NET 中提供了多種認(rèn)證方式,比如大名鼎鼎的Windows 身份驗(yàn)證
Windows 身份驗(yàn)證模式根據(jù) IIS 所提供的憑據(jù)將當(dāng)前 User 屬性值設(shè)置為 WindowsIdentity,但它不修改提供給操作系統(tǒng)的 Windows 標(biāo)識(shí)。提供給操作系統(tǒng)的 Windows 標(biāo)識(shí)用于進(jìn)行權(quán)限檢查(如 NTFS 文件權(quán)限檢查)或者用于使用集成安全性連接到數(shù)據(jù)庫(kù)。默認(rèn)情況下,此 Windows 標(biāo)識(shí)是 ASP.NET 進(jìn)程的標(biāo)識(shí)。在 Microsoft Windows 2000 和 Windows XP Professional 上,此標(biāo)識(shí)是 ASP.NET 輔助進(jìn)程的標(biāo)識(shí),即本地 ASPNET 帳戶。在 Windows Server 2003 上,此標(biāo)識(shí)是 ASP.NET 應(yīng)用程序所屬的 IIS 應(yīng)用程序池的標(biāo)識(shí)。默認(rèn)情況下,此標(biāo)識(shí)是 NETWORK SERVICE 帳戶。
通過啟用模擬功能,可以將 ASP.NET 應(yīng)用程序的 Windows 標(biāo)識(shí)配置為 IIS 所提供的 Windows 標(biāo)識(shí)。也就是說(shuō),指示 ASP.NET 應(yīng)用程序模擬 IIS 為 Windows 操作系統(tǒng)驗(yàn)證的所有任務(wù)(包括文件和網(wǎng)絡(luò)訪問)提供的標(biāo)識(shí)。(解釋來(lái)自MSDN Library)
還有一種常有的認(rèn)證即是 Forms 身份驗(yàn)證
Forms 身份驗(yàn)證使不要求 Windows 身份驗(yàn)證的 Web 應(yīng)用程序可以進(jìn)行用戶和密碼驗(yàn)證。使用 Forms 身份驗(yàn)證時(shí),用戶信息存儲(chǔ)在外部數(shù)據(jù)源中,例如Member 數(shù)據(jù)庫(kù),或存儲(chǔ)在應(yīng)用程序的配置文件中。在用戶通過身份驗(yàn)證后,F(xiàn)orms 身份驗(yàn)證即會(huì)在 Cookie 或 URL 中維護(hù)一個(gè)身份驗(yàn)證票證,這樣已通過身份驗(yàn)證的用戶就無(wú)需在每次請(qǐng)求時(shí)都提供憑據(jù)了。
這樣一來(lái)就方便也安全了,那具體怎么完成Forms身份認(rèn)證的設(shè)置呢?
首先打開配置文件web.config
找到<system.web>節(jié)點(diǎn)下的 <authentication> 和 <authorization>節(jié)點(diǎn)加入
<system.web>
<authentication mode="Forms">
<forms loginUrl="login.ASPx" />
</authentication>
<authorization>
<deny users="?" />
</authorization>
<authentication>節(jié)點(diǎn)是設(shè)置認(rèn)證方式,這里我們制定 Forms
<forms>節(jié)點(diǎn)內(nèi)的屬性可以制定 認(rèn)證頁(yè)面(登錄頁(yè)面)、默認(rèn)頁(yè)面、是否使用cookie、認(rèn)證超時(shí)時(shí)間等等。
這里我們只指定認(rèn)證頁(yè)面 loginUrl="login.ASPx"
<authorization> 節(jié)點(diǎn)是認(rèn)證節(jié)點(diǎn)
<deny> 是否認(rèn)節(jié)點(diǎn) 指定屬性 users="?"即為未經(jīng)過認(rèn)證的人都需要去認(rèn)證頁(yè)面進(jìn)行認(rèn)證
與之對(duì)應(yīng)的是<allow>允許節(jié)點(diǎn)
這樣一來(lái)思路就清晰了,無(wú)論用戶訪問什么頁(yè)面服務(wù)器會(huì)判斷用戶是否通過認(rèn)證,如果沒有轉(zhuǎn)到認(rèn)證頁(yè)面。
下一步將要確定在login.ASPx.cs文件中如何完成我們認(rèn)證工作了
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(用戶名,密碼) 方法是在邏輯層使用的驗(yàn)證用戶是否合法的方法
當(dāng)然如果用 Membership類繼承的一些驗(yàn)證方法會(huì)更簡(jiǎn)單,但是在此不詳細(xì)說(shuō)明了。
FormsAuthentication 類(終于提到主人公了),它所屬的命名空間為 System.Web.Security;
FormsAuthentication 是用來(lái)設(shè)置認(rèn)證的類,如果用戶合法,把用戶名保存在cookie中,之后用戶再次訪問或訪問其他頁(yè)面都無(wú)需再次認(rèn)證
它內(nèi)部的常用方法有
RedirectFromLoginPage(用戶名(string),是否把用戶名長(zhǎng)期保存在coolie中(bool))
將經(jīng)過身份驗(yàn)證的用戶重定向回最初請(qǐng)求的 URL 或默認(rèn) URL
SetAuthCookie(用戶名(string),是否把用戶名長(zhǎng)期保存在coolie中(bool))
為提供的用戶名創(chuàng)建一個(gè)身份驗(yàn)證票證,并將其添加到響應(yīng)的 Cookie 集合或 URL
等等 方法很多,不詳細(xì)列出了。
具體的使用或者深入的挖掘希望各位自己去探索了
AspNet技術(shù):ASP.NET 2.0 中Forms安全認(rèn)證,轉(zhuǎn)載需保留來(lái)源!
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。