摘要:隨著ASP.NET網(wǎng)絡(luò)應(yīng)用的不斷發(fā)展,安全管理功能已經(jīng)顯得非常重要。該文通過對ASP.NET網(wǎng)絡(luò)安全管理的模式和運行機(jī)制的分析,希望對大家建立起更高效更安全的ASP.NET網(wǎng)絡(luò)管理環(huán)境有所幫助。
關(guān)鍵詞:ASP.Net;安全;驗證
中圖分類號:TP393文獻(xiàn)標(biāo)識碼:A文章編號:1009-3044(2012)04-0771-01
ASP.NET 2.0對于Web網(wǎng)頁資源訪問的安全管理提供了兩道機(jī)制,一道是驗證( Authentication),另一道是授權(quán)(Authorization),而驗證與授權(quán)要怎么分辨呢?即便是管理IIS或Windows服務(wù)器的網(wǎng)管人員都不一定能夠清楚回答這兩個字義上的分別,但他們確實是每天都與這兩種機(jī)制打交道。
所謂的“驗證”是網(wǎng)站或Windows大門入口警衛(wèi),它只負(fù)責(zé)驗證用戶是否具有合法的用戶名與密碼,若用戶名與密碼正確則對用戶連接或Request放行,若不正確則禁止進(jìn)入網(wǎng)站或Windows操作系統(tǒng);而“授權(quán)”則是指對整個網(wǎng)站或Windows操作系統(tǒng)中個別資源項目的訪問權(quán)限,為什么還要多此一舉?因為驗證只是大門警衛(wèi),它所驗證的東西很粗略,只驗證用戶名密碼,但問題隨之而來,用戶進(jìn)入網(wǎng)站后是不是就可以為所欲為,任意訪問整個網(wǎng)站機(jī)密資料呢?答案當(dāng)然是否定的,所以各位可以理解到必須要有更進(jìn)一步的精密管理機(jī)制來限制用戶訪問權(quán)限,而那正是授權(quán)機(jī)制的工作。
本文主要討論ASP.NET2.0網(wǎng)絡(luò)安全管理中驗證機(jī)制。ASP.NET2.0網(wǎng)絡(luò)安全管理驗證包括None、Windows、Forms、Passport四種模式,其中最常用的是Windows和Forms驗證模式。
1Windows驗證模式
首先要談的是Windows驗證模式,如果讀者打算使用Windows的驗證模式,一定要將IIS“匿名訪問”的選項打勾移除,并在“集成Windows身份驗證”選項打勾。這個模式會使用Windows操作系統(tǒng)內(nèi)置的帳號來驗證,好處是可以和公司的Windows服務(wù)器帳號集成,壞處是任何一位用戶都必須在Windows中建立帳號。想想看,若我們設(shè)計的網(wǎng)站供Internet訪問或者有成千上萬用戶帳號,根本不可能用這個模式。因為每個聯(lián)機(jī)帳號不但需要CAL的License費用,且Windows本身內(nèi)置帳號Schema太過簡單,比如說想存放用戶的星座、血型,這是辦不到的;即便辦得到,服務(wù)器管理員也會認(rèn)為這是瘋狂的行為。故此模式比較適合獨立服務(wù)器或者具有AD環(huán)境的公司來做Single SignOn單一簽入的集成。
2Forms驗證模式
如前面所言,Windows驗證模式是驗證用戶帳號,但因為必須在Windows創(chuàng)建帳號而非在數(shù)據(jù)庫上,另外每個用戶聯(lián)機(jī)訪問授權(quán)(CAL)必須花錢購買。這樣,對于網(wǎng)頁應(yīng)用程序來講顯得頗為掣肘,變得非常不實際,也不實用。
為了克服上述的缺陷,我們可以使用Forms驗證模式來避開上述兩個重大限制,使用Forms驗證模式就可不必依賴Windows本身內(nèi)置的帳號密碼,程序員可以將用戶帳號、密碼或組存放在SQL Server或其他數(shù)據(jù)庫中(ASP.NET 2.0提供現(xiàn)成的Membership與Role機(jī)制來管理用戶帳號及群),通過自定義的UI及程序來驗證用戶身份,若用戶通過驗證,則可以進(jìn)行下一步的網(wǎng)頁訪問操作,若不成功則會被導(dǎo)向默認(rèn)的網(wǎng)頁(如Login.aspx)來強(qiáng)制用戶一定要輸入帳號及密碼驗證身份,同時也達(dá)到保護(hù)網(wǎng)站Security的目的。
Forms驗證模式通常配合IIS的匿名訪問,當(dāng)用戶訪問網(wǎng)頁時,只需第一次輸入帳號密碼,隨后個人身份將會儲存在Cookies中,并且后續(xù)的Request都是自動加密解密存在于Cookies中的身份。”因此我們可以了解到要使用Forms驗證模式:①第一步是要開啟ns的匿名訪問;②第二步是設(shè)置ASP.NET使用Forms驗證模式;③第三步是必須通過少許程序來輔助驗證.
3Forms驗證模式機(jī)制的探討
Forms驗證模式用戶第一次瀏覽網(wǎng)頁時會被導(dǎo)向Login.aspx強(qiáng)制進(jìn)行登錄,那以后訪問別的Web Form是否又要被導(dǎo)向Login.aspx再登陸?答案是不必!但為何通過身份驗證后就可以任意瀏覽整個網(wǎng)站,而不必再次輸入帳號密碼?一定有人會說:“就像Windows操作系統(tǒng)只要一次輸入帳號密碼就夠了,網(wǎng)頁也是同樣的道理!”沒錯,是同樣的道理,Windows登錄AD網(wǎng)域后是有所謂的Session Ticket,大家都知道:Ticket中文譯作“票”,所以當(dāng)我們?nèi)ナ褂肁D網(wǎng)域的資源時,系統(tǒng)就會拿您登錄后所配發(fā)的那個數(shù)字Ticket去自動驗證(就像火車站需要驗票一樣)。其實是執(zhí)行重復(fù)性驗證操作,但這跟ASP.NET又有何關(guān)系?其實ASP.NET也是遵循相同原理,因為ASP.NET也有一個叫Forms -Authentication Ticket,以此Ticket來進(jìn)行身份驗證。Forms驗證模式在用戶第一次登錄成功后,就會將此用戶的身份加密儲存在Http Cookies中,而該用戶后續(xù)發(fā)出的Request也會自動從Cookies解密用戶身份以提供系統(tǒng)驗證,否則每查詢一次網(wǎng)頁必須再輸入一次帳號密碼!各位在Internet瀏覽網(wǎng)站中只要輸入一致帳號密碼就可以通行也是這個道理,所以Forms驗證模式背后運作機(jī)制的就是Http Cookies,通過Http Cookies來達(dá)成身份驗證的自動化。而Http Cookies就是ASP. NET所使用的Authentication Ticket。
4結(jié)束語
本文分析了ASP.NET的網(wǎng)絡(luò)安全管理的驗證模式,特別是對Forms模式進(jìn)行了較為詳細(xì)論述,在實際應(yīng)用中,若能結(jié)合Cookies的管理和清除技術(shù),可以構(gòu)建起一個安全高效的網(wǎng)絡(luò)應(yīng)用系統(tǒng)。
參考文獻(xiàn):
[1]洪石單.ASP.NET范例開發(fā)大全[M].北京:清華大學(xué)