梁瑞仕+馬慧+楊亮+肖濤
摘 要:成員資格管理是Web系統(tǒng)開(kāi)發(fā)過(guò)程中極其重要的問(wèn)題,是保證系統(tǒng)安全性的重要手段。成員資格管理主要包括用戶(hù)和角色定義、用戶(hù)驗(yàn)證和授權(quán)等內(nèi)容。研究了基于ASP.NET的成員資格管理框架體系,給出了典型的編程范例,并從課堂教學(xué)角度出發(fā),設(shè)計(jì)了一套基于類(lèi)比法的教學(xué)方法及案例,適用于各級(jí)院校和培訓(xùn)機(jī)構(gòu)的現(xiàn)場(chǎng)教學(xué)使用。
關(guān)鍵詞關(guān)鍵詞:ASP.NET;Web應(yīng)用系統(tǒng)安全;成員資格管理;類(lèi)比教學(xué)法
DOIDOI:10.11907/rjdk.161715
中圖分類(lèi)號(hào):G434
文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1672-7800(2016)008-0186-03
0 引言
保證系統(tǒng)安全性是Web應(yīng)用開(kāi)發(fā)過(guò)程中的核心問(wèn)題,而系統(tǒng)安全的關(guān)鍵問(wèn)題是用戶(hù)及其權(quán)限控制,通常稱(chēng)為成員資格管理(Membership Management),主要包括用戶(hù)和角色定義、用戶(hù)驗(yàn)證和授權(quán)等。
ASP.NET是由微軟公司推出并被廣泛運(yùn)用于工業(yè)界的Web開(kāi)發(fā)技術(shù)[1,2],它在用戶(hù)及安全管理方面有完整的解決方案。盡管工業(yè)界和學(xué)術(shù)界對(duì)于相關(guān)方面的論述[3,4],以及關(guān)于ASP.NET教學(xué)研究方面的文獻(xiàn)非常多[5],但很多材料容易陷入技術(shù)細(xì)節(jié)的闡述而忽略了對(duì)框架體系整體的介紹,不便于課堂教學(xué)使用。本文將從框架全貌的角度出發(fā)對(duì)基于ASP.NET的成員資格管理框架進(jìn)行介紹和總結(jié),并編寫(xiě)了典型的編程范例。為了提高課堂教學(xué)效果,研究和借鑒了基于類(lèi)比法的教學(xué)方法[6],并設(shè)計(jì)了用于理解成員資格管理核心概念的“訪(fǎng)問(wèn)大學(xué)校園”類(lèi)比教學(xué)案例。
1 基于ASP.NET的成員資格管理框架結(jié)構(gòu)
ASP.NET技術(shù)為實(shí)現(xiàn)成員資格管理提供了一整套解決方案,包括3個(gè)層級(jí)的技術(shù)方案(見(jiàn)圖1)。位于底層的是數(shù)據(jù)庫(kù)系統(tǒng)(默認(rèn)數(shù)據(jù)庫(kù)名稱(chēng)為aspnetdb),可實(shí)現(xiàn)對(duì)成員資格數(shù)據(jù)進(jìn)行持久化存儲(chǔ),包括用戶(hù)信息、角色信息、用戶(hù)偏好、登陸信息等;位于中間層的是.NET基礎(chǔ)類(lèi)庫(kù),主要是位于System.Web.Security 命名空間下的各種類(lèi)和委托等,包括Membership、Roles、FormsAuthentication類(lèi)等,提供包括新增/刪除/修改用戶(hù)和角色、表單驗(yàn)證等功能;位于上層的則是提供給開(kāi)發(fā)者和管理員的幾種工具,包括網(wǎng)站管理工具、網(wǎng)站配置文件、登陸系列控件、高級(jí)程序設(shè)計(jì),用于在系統(tǒng)開(kāi)發(fā)和管理過(guò)程中實(shí)現(xiàn)具體的成員資格管理任務(wù)。其中前2種工具以可視化向?qū)Х绞教峁┮恍┗镜木W(wǎng)站安全管理工具,主要面向網(wǎng)站管理員;后2種則通過(guò)可視化設(shè)計(jì)和手動(dòng)編程方式實(shí)現(xiàn)完備的成員資格管理,主要面向Web系統(tǒng)開(kāi)發(fā)者。
網(wǎng)站管理工具適合網(wǎng)站管理員在服務(wù)器后臺(tái)小批量地添加用戶(hù)和角色,創(chuàng)建網(wǎng)站訪(fǎng)問(wèn)規(guī)則,如為Web系統(tǒng)添加二級(jí)管理員、網(wǎng)站角色等,如圖2所示。
網(wǎng)站配置文件用于保存網(wǎng)站的驗(yàn)證、授權(quán)、數(shù)據(jù)庫(kù)連接字符串等基本信息。例如,為了實(shí)現(xiàn)Forms身份驗(yàn)證,在配置文件的
以上語(yǔ)句實(shí)現(xiàn)了對(duì)網(wǎng)站的forms身份驗(yàn)證,當(dāng)驗(yàn)證通過(guò)時(shí)跳轉(zhuǎn)至默認(rèn)主頁(yè),當(dāng)驗(yàn)證不通過(guò)時(shí)跳轉(zhuǎn)至登錄頁(yè)面。
為了實(shí)現(xiàn)對(duì)網(wǎng)站根目錄的授權(quán)配置,在網(wǎng)站根目錄配置文件的
以上配置語(yǔ)句使Web系統(tǒng)啟用了角色功能,并實(shí)現(xiàn)了對(duì)網(wǎng)站根目錄的授權(quán),即拒絕匿名用戶(hù)訪(fǎng)問(wèn),而運(yùn)行管理員角色訪(fǎng)問(wèn)。
2 典型編程范例
本節(jié)展示了成員資格管理的典型操作和編程范例,此處選取注冊(cè)用戶(hù)、用戶(hù)登錄、用戶(hù)身份驗(yàn)證等3個(gè)典型操作進(jìn)行說(shuō)明。
2.1 注冊(cè)用戶(hù)典型代碼
用戶(hù)注冊(cè)功能幾乎是每個(gè)Web系統(tǒng)的必備功能。ASP.NET提供了CreateUserWizard控件幫助開(kāi)發(fā)者快速搭建登錄界面,并內(nèi)置默認(rèn)登錄邏輯,幫助開(kāi)發(fā)者提高開(kāi)發(fā)效率。當(dāng)然,對(duì)于大部分網(wǎng)站而言,該控件及內(nèi)置登錄邏輯有時(shí)并不能很好地滿(mǎn)足Web系統(tǒng)的個(gè)性化需求。因此,本節(jié)重點(diǎn)介紹了ASP.NET提供的注冊(cè)用戶(hù)相關(guān)功能類(lèi)庫(kù)和典型使用方法。
注冊(cè)用戶(hù)過(guò)程需要用戶(hù)在Web頁(yè)面輸入各種所需的注冊(cè)信息,然后將注冊(cè)信息傳入底層數(shù)據(jù)庫(kù)進(jìn)行身份判斷,進(jìn)而拒絕用戶(hù)注冊(cè)或完成用戶(hù)注冊(cè)過(guò)程。典型代碼如下:
string username = "abc",password = "123abcd~";//此處表示用戶(hù)輸入的用戶(hù)名和密碼
string email = "abc@abc.com",passwordQuestion = "abc",passwordAnswer = "abc";//此處表示注冊(cè)信息
MembershipCreateStatus status; //用于函數(shù)的輸出參數(shù),不需賦值,指示用戶(hù)創(chuàng)建失敗原因
MembershipUser user = Membership.GetUser(username); //從數(shù)據(jù)庫(kù)中讀取username的數(shù)據(jù)
if (user == null) //如果用戶(hù)不存在
{
/*如果:①用戶(hù)名或密碼不符合網(wǎng)站要求;②網(wǎng)站要求提供Email、密碼問(wèn)題和答案等信息,但調(diào)用函數(shù)時(shí)未提供或不符合要求,以上情形都會(huì)引發(fā)異常。編程實(shí)踐中最好將以下代碼放入try-catch塊中*/
user = Membership.CreateUser(username,password,email,passwordQuestion,passwordAnswer,true,out status);
if (user != null)
Response.Write("");
}
else
Response.Write("")
2.2 用戶(hù)登錄及驗(yàn)證典型代碼
用戶(hù)登陸過(guò)程中經(jīng)常涉及2個(gè)過(guò)程:驗(yàn)證和跳轉(zhuǎn)。驗(yàn)證過(guò)程是將輸入的用戶(hù)名和密碼傳入底層數(shù)據(jù)庫(kù),由ASP.NET自動(dòng)去aspnetdb數(shù)據(jù)庫(kù)進(jìn)行身份驗(yàn)證。根據(jù)驗(yàn)證結(jié)果,將確定將用戶(hù)轉(zhuǎn)入何種功能頁(yè)面,驗(yàn)證成功后則將用戶(hù)轉(zhuǎn)入相關(guān)頁(yè)面。典型的用戶(hù)登錄和驗(yàn)證代碼如下:
string username = "abc",password = "123abcd~";//此處表示用戶(hù)輸入的用戶(hù)名和密碼
bool isValidUser = Membership.ValidateUser(username,password);//執(zhí)行身份驗(yàn)證
if(isValidUser) //驗(yàn)證通過(guò),表示是合法存在的用戶(hù)
{
//跳轉(zhuǎn)回到上次的頁(yè)面或登陸頁(yè)面,將用戶(hù)名存儲(chǔ)在cookie中
FormsAuthentication.RedirectFromLoginPage(username,true);
}
2.3 創(chuàng)建角色及添加用戶(hù)到角色典型代碼
角色的目的是便于系統(tǒng)對(duì)于大量用戶(hù)提前進(jìn)行分類(lèi)和管理,以提高用戶(hù)和授權(quán)管理效率。ASP.NET提供了非常便利的角色和用戶(hù)管理類(lèi)庫(kù),角色和用戶(hù)均以字符串形式名稱(chēng)表示,非常方便開(kāi)發(fā)者理解和使用。以下是創(chuàng)建角色以及將用戶(hù)添加到角色中的典型代碼演示:
string taRole = "Teacher",stRole = "Student";//此處的Teacher、Student表示角色名稱(chēng)
string taUser = "Larry Page";//此處的Larry Page表示具體的用戶(hù)名稱(chēng)
string[]stUsers = new string[]{ "Mei H.","Lei L." };//此處Mei H.,Lei L.表示具體的用戶(hù)名稱(chēng)
//創(chuàng)建兩種新角色
Roles.CreateRole(taRole);
Roles.CreateRole(stRole);
Roles.AddUserToRole(taUser,taRole);//添加單個(gè)用戶(hù)到角色中
Roles.AddUsersToRole(stUsers,stRole);//添加多個(gè)用戶(hù)到角色中
3 基于類(lèi)比法的教學(xué)方法及案例研究
對(duì)于一個(gè)Web應(yīng)用系統(tǒng),通常由很多功能模塊及其相應(yīng)資源組成,供各種網(wǎng)站成員有限制地訪(fǎng)問(wèn)并提供服務(wù)。因此,Web應(yīng)用系統(tǒng)的安全管理可以直觀(guān)地理解為針對(duì)不同網(wǎng)站成員,設(shè)計(jì)不同權(quán)限,提供特定的網(wǎng)站服務(wù)。為了在課堂教學(xué)過(guò)程中使學(xué)生快速、準(zhǔn)確、完整地理解成員資格中的“驗(yàn)證”和“授權(quán)”2個(gè)核心概念,引入了類(lèi)比教學(xué)法,并設(shè)計(jì)了一套貼近現(xiàn)實(shí)生活的“訪(fǎng)問(wèn)大學(xué)校園”的典型教學(xué)案例。
在一個(gè)典型的大學(xué)校園,有公共教學(xué)樓、圖書(shū)館、宿舍樓、實(shí)驗(yàn)室等,這些場(chǎng)所由于涉及公共設(shè)備或師生的私人財(cái)產(chǎn),都有嚴(yán)格的出入條件,如圖書(shū)館只能允許持有校園卡的師生進(jìn)入,宿舍樓只允許居住本棟的學(xué)生刷卡進(jìn)出等。此外還有門(mén)衛(wèi)保安專(zhuān)人把守的大學(xué)校門(mén),負(fù)責(zé)維持出入校門(mén)的秩序并進(jìn)行登記管理。比如,任何人都應(yīng)出示合法證件進(jìn)入校園,對(duì)于非本校師生還要進(jìn)行額外的身份登記。實(shí)際上,大學(xué)校園相當(dāng)于一個(gè)典型的Web系統(tǒng),各種場(chǎng)所及其設(shè)施則相當(dāng)于Web系統(tǒng)的多種功能模塊及資源,對(duì)這些功能模塊及資源都有其自身的權(quán)限要求,如后臺(tái)系統(tǒng)一般只允許授權(quán)管理員訪(fǎng)問(wèn)和登陸等。
以上關(guān)于大學(xué)校園的安全管理可引出2個(gè)重要概念:驗(yàn)證和授權(quán)。校門(mén)衛(wèi)會(huì)對(duì)出入校園的行人進(jìn)行身份核實(shí),符合條件的行人可放行進(jìn)入校園,不符合條件且無(wú)法提供合理身份證明的行人將被拒絕進(jìn)入,這便是驗(yàn)證過(guò)程。一旦驗(yàn)證通過(guò),行人便成為合法用戶(hù)進(jìn)入校園,理論上就具備了使用校園設(shè)施的前提條件。接下來(lái),這些合法用戶(hù)可進(jìn)入校園的公共操場(chǎng)、花園等場(chǎng)所,一般這些地方都開(kāi)放給任何進(jìn)入校園的人使用。但有些場(chǎng)所,如圖書(shū)館、教學(xué)樓、實(shí)驗(yàn)室等,需要用戶(hù)有相應(yīng)權(quán)限之后才可進(jìn)入,這便是授權(quán)過(guò)程。因此,學(xué)校會(huì)分配給教職工、學(xué)生、校友等不同的功能卡,以便其具有不同的權(quán)限進(jìn)入相應(yīng)場(chǎng)所,這種“授權(quán)”操作實(shí)現(xiàn)了對(duì)校園設(shè)施的安全管理。實(shí)際上,Web系統(tǒng)的功能模塊及其資源的使用也同樣存在驗(yàn)證和授權(quán)過(guò)程。對(duì)每個(gè)登錄Web系統(tǒng)的用戶(hù),系統(tǒng)均會(huì)驗(yàn)證身份以確定其是否有資格訪(fǎng)問(wèn)系統(tǒng),然后對(duì)驗(yàn)證通過(guò)的合法用戶(hù),根據(jù)其授予的權(quán)限,給予相應(yīng)功能模塊及資源的訪(fǎng)問(wèn)資格,以達(dá)到系統(tǒng)安全管理的目的。
當(dāng)然,由于大學(xué)校園的師生眾多,為了便于管理,會(huì)將師生分類(lèi)以角色的形式表現(xiàn),可大致分為幾種角色:教師、學(xué)生、職工、管理員等,從而使對(duì)大量用戶(hù)的授權(quán)管理簡(jiǎn)化為對(duì)幾種角色的管理。實(shí)際上,Web系統(tǒng)也同樣運(yùn)用了角色的概念,授權(quán)首先是針對(duì)角色進(jìn)行,每種角色均有對(duì)應(yīng)權(quán)限。對(duì)于任何用戶(hù),均可為其分配一種或多種角色,于是便相應(yīng)地授予該用戶(hù)一種或多種權(quán)限。
本案例已成功運(yùn)用于本科教學(xué)課堂當(dāng)中,每位教師只需進(jìn)行簡(jiǎn)單的學(xué)習(xí)培訓(xùn)便可掌握教學(xué)要點(diǎn),而學(xué)生能在課堂學(xué)習(xí)過(guò)程中非常容易地理解成員資格管理中的核心概念,有助于其下一步學(xué)習(xí)相關(guān)的理論知識(shí)和編程技巧。
4 結(jié)語(yǔ)
本文討論了基于ASP.NET的成員資格管理框架,給出了成員資格管理的框架體系結(jié)構(gòu)圖,介紹了各個(gè)層次的特點(diǎn),并給出了典型的編程案例。ASP.NET的用戶(hù)和角色管理功能完善,且提供了便利的登陸控件及完整的類(lèi)庫(kù)供開(kāi)發(fā)者使用,能滿(mǎn)足大部分Web系統(tǒng)的開(kāi)發(fā)需求。此外,本文提出了基于類(lèi)比法的教學(xué)思路和案例,并在本科教學(xué)課堂中進(jìn)行運(yùn)用。實(shí)踐表明,該教學(xué)方法可起到良好的教學(xué)效果。
參考文獻(xiàn):
[1]IMAR SPAANJAARS.Beginning ASP.NET 4.5:in C# and VB[M].Wiley,2012.
[2]沈士根,汪承焱,許小東.Web程序設(shè)計(jì)——ASP.NET使用網(wǎng)站開(kāi)發(fā)[M].第2版.北京:清華大學(xué)出版社,2014.
[3]楊旺明.基于Asp.Net的權(quán)限系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)與數(shù)字工程,2014(3):482-485.
[4]趙強(qiáng),張紅忠.基于ASP.NET的網(wǎng)站系統(tǒng)安全性設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)應(yīng)用,2008(S2):271-273,279.
[5]楊亞菁.以項(xiàng)目實(shí)踐為導(dǎo)向的ASP.NET課程層次化教學(xué)研究[J].軟件導(dǎo)刊,2016,15(1):186-187.
[6]梁瑞仕,曾荔枝,楊亮.類(lèi)比教學(xué)法在本科計(jì)算機(jī)算法課程中的探索與實(shí)踐[J].現(xiàn)代計(jì)算機(jī),2013(8):46-47.
(責(zé)任編輯:黃 健)