徐輝
摘要:ASP.NET沒有跨域單點(diǎn)登錄的實(shí)現(xiàn)機(jī)制。分析了跨域單點(diǎn)登錄的原理,提出了一種在SSO網(wǎng)站存儲登錄的用戶對象,瀏覽器Cookie中存儲SSO網(wǎng)站的用戶令牌,信任網(wǎng)站之間傳遞令牌、間接共享Cookie的跨域SSO解決方案。
關(guān)鍵詞:ASP.NET;跨域;單點(diǎn)登錄;Web服務(wù)
中圖分類號:TP315文獻(xiàn)標(biāo)識碼:A文章編號:1009-3044(2012)20-4907-02
Implementation of Cross-domain Single Sign-on System Based on .NET Web Service
XU Hui
(School of Information and Statistics,Guangxi University of Finance and Economics, Nanning 530003,China)
Abstract: ASP.NET does not have cross-domain single sign-on(SSO) implementation mechanism. This paper analyzes the cross-domain single sign-on principle, proposes a cross-domain SSO solution that logged-in user object is stored in SSO website, user token is stored in browsers Cookie, and then user token is passed between trusted sites, indirectly sharing Cookie.
Key words: ASP.NET; cross-domain; single sign-on; Web services
在當(dāng)今WWW的廣泛應(yīng)用中,許多單位已經(jīng)為內(nèi)部的各個應(yīng)用系統(tǒng)和Web門戶網(wǎng)站使用統(tǒng)一身份認(rèn)證中心進(jìn)行用戶認(rèn)證。單點(diǎn)登錄(SSO,Single Sign On)是流行的統(tǒng)一身份認(rèn)證解決方案之一。焦亞楠等人[1]提出了一種用Java實(shí)現(xiàn)、基于SAML的跨域單點(diǎn)登錄解決方案;岳小婷[2]提出了.NET平臺下同一主域下的單點(diǎn)登錄實(shí)現(xiàn)方法;許小東等人[3]提出了在.NET平臺下使用Forms身份認(rèn)證機(jī)制的單點(diǎn)登模型。對于跨域的單點(diǎn)登錄,ASP.NET沒有提供內(nèi)置的實(shí)現(xiàn)機(jī)制。因此,針對這一問題,該文提出一種采用SSO網(wǎng)站集中存儲登錄用戶的用戶對象,使不同域名的信任網(wǎng)站之間間接共享Cookie,生成用戶令牌在信任網(wǎng)站之間傳遞的SSO實(shí)現(xiàn)模型。
1 NET跨域單點(diǎn)登錄模型
為了實(shí)現(xiàn).NET跨域的SSO,引入一個專用的SSO網(wǎng)站,該網(wǎng)站有一個存儲用戶身份信息和授權(quán)訪問信息的數(shù)據(jù)庫,用于驗(yàn)證用戶身份、設(shè)置身份驗(yàn)證Cookie,以及授權(quán)訪問。跨域SSO模型如圖1所示。在該模型中,瀏覽器不儲存每個信任網(wǎng)站的身份驗(yàn)證Cookie,而是存儲SSO網(wǎng)站的唯一身份驗(yàn)證Cookie。瀏覽器對SSO模型下的任何信任網(wǎng)站的每個請求都重定向到SSO網(wǎng)站,由SSO網(wǎng)站檢查用戶的身份驗(yàn)證Cookie是否存在。如果存在身份驗(yàn)證Cookie,表明用戶已經(jīng)登錄,則從原請求的信任網(wǎng)站中提供授權(quán)的網(wǎng)頁給瀏覽器。如果不存在身份驗(yàn)證Cookie,則用戶被重定向到相應(yīng)網(wǎng)站的登錄頁面。
瀏覽器存儲一個名為AuthUserToken的Cookie,其值的格式為“用戶令牌|有效時間”。用戶令牌是SSO網(wǎng)站驗(yàn)證用戶身份成功后返回的全局唯一值,表明用戶已通過SSO身份認(rèn)證??缬騿吸c(diǎn)登錄的過程為兩個階段:
1)匿名用戶訪問網(wǎng)站1的授權(quán)頁面,首先重定向到SSO網(wǎng)站,并在URL中加入原請求的URL為參數(shù)。SSO網(wǎng)站檢查瀏覽器是否設(shè)置了身份驗(yàn)證Cookie,或請求中是否含有用戶令牌。如果兩者都沒有,則重定向到網(wǎng)站1的登錄頁面。用戶輸入憑據(jù)后,網(wǎng)站1調(diào)用SSO網(wǎng)站的Web服務(wù),驗(yàn)證用戶憑據(jù)。如果驗(yàn)證成功,則返回登錄的用戶對象和用戶令牌。此令牌是在用戶每次登錄時產(chǎn)生的GUID值。網(wǎng)站1標(biāo)識已登錄的用戶(如在Cookie中存儲用戶令牌),將原請求URL和用戶令牌作為新請求的參數(shù),重定向到SSO網(wǎng)站。SSO網(wǎng)站檢查傳入的請求URL,發(fā)現(xiàn)用戶令牌參數(shù),但沒有可用的身份驗(yàn)證Cookie,這表明用戶已通過網(wǎng)站1的驗(yàn)證。因此,SSO網(wǎng)站使用令牌,從用戶信息數(shù)據(jù)庫中檢索用戶,設(shè)置身份驗(yàn)證Cookie、用戶信息,以及有效時間等。然后重定向到網(wǎng)站1中最初請求URL的授權(quán)頁面,并在網(wǎng)址中傳遞令牌。網(wǎng)站1發(fā)現(xiàn)請求中含有用戶令牌,通過調(diào)用SSO網(wǎng)站的Web服務(wù),驗(yàn)證通過后,將最初請求頁面輸出到瀏覽器。這一過程對應(yīng)于圖1的步驟1-步驟7。
2)在網(wǎng)站1登錄的用戶瀏覽器訪問其他信任網(wǎng)站(如網(wǎng)站2)的授權(quán)頁面時,將此請求作為URL參數(shù)重定向到SSO網(wǎng)站。由于瀏覽器已經(jīng)擁有SSO網(wǎng)站的身份驗(yàn)證Cookie,因此將這個Cookie添加到請求參數(shù),再發(fā)送請求到SSO網(wǎng)站。SSO網(wǎng)站檢查傳入的請求,找到身份驗(yàn)證Cookie,檢查該Cookie是否已過期。如果不過期,則從Cookie中檢索用戶令牌,并將請求重定向到網(wǎng)站2的最初請求URL,并在URL中加入用戶令牌參數(shù)。因此,網(wǎng)站2通過調(diào)用SSO網(wǎng)站的Web服務(wù),驗(yàn)證用戶令牌成功后,執(zhí)行網(wǎng)站2的最初請求頁面,將響應(yīng)輸出到瀏覽器。這一過程對應(yīng)于圖1的步驟8—步驟11。
2 NET的跨域單點(diǎn)登錄設(shè)計(jì)
2.1 SSO組成模塊
基于.NET web服務(wù)的跨域單點(diǎn)登錄系統(tǒng)由四個模塊組成:登錄模塊、身份認(rèn)證模塊、Web服務(wù)代理模塊、授權(quán)管理模塊。登錄模塊實(shí)現(xiàn)用戶密碼的一次性驗(yàn)證;身份認(rèn)證模塊提供Web服務(wù)方法,驗(yàn)證用戶的合法性;Web服務(wù)代理模塊用于信任網(wǎng)站調(diào)用SSO網(wǎng)站的Web服務(wù);授權(quán)管理模塊授予合法用戶的訪問資源權(quán)限。
2.2 SSO網(wǎng)站設(shè)計(jì)
SSO網(wǎng)站主要實(shí)現(xiàn)統(tǒng)一的用戶身份驗(yàn)證、授權(quán)管理功能。用戶身份驗(yàn)證由信任網(wǎng)站通過SSO代理訪問,驗(yàn)證用戶身份,獲取SSO網(wǎng)站上用戶的登錄狀態(tài),它主要包含以下Web服務(wù)方法:
1)Authenticate():驗(yàn)證瀏覽器提供的用戶憑據(jù)是否與用戶信息數(shù)據(jù)庫的用戶身份匹配。驗(yàn)證成功后返回登錄的用戶對象和令牌,將它們存儲到SSO網(wǎng)站應(yīng)用對象中,作為用戶已登錄SSO的標(biāo)記,同時將在瀏覽器Cookie中存儲令牌。
2)GetUserByToken():根據(jù)令牌獲取對應(yīng)的用戶對象。
3)IsUserLoggedIn():判斷令牌對應(yīng)的用戶是否已登錄SSO。
授權(quán)管理是根據(jù)分配的資源權(quán)限,對通過SSO身份認(rèn)證的用戶授予訪問受保護(hù)頁面的權(quán)限。授權(quán)管理通過ASPX頁面(Authen ticate.aspx),設(shè)置和檢索用戶身份驗(yàn)證Cookie變量值。該頁面由SSO代理模塊重定向,根據(jù)請求的類型,設(shè)置、檢查或刪除身份驗(yàn)證Cookie變量。其主要方法如下:
1)SetAuthCookie():如果在請求URL中含有Token參數(shù),意味著用戶是經(jīng)過SSO認(rèn)證的,因此,在用戶瀏覽器的Cookie中設(shè)置名為AuthUserToken的Cookie值,存儲用戶令牌、有效時間,再重向到原URL。
2)CheckCookie():從瀏覽器Cookie中讀取AuthUserToken值,得到用戶令牌和有效時間。如果有效時間已過期,則刪除Au thUserToken,重定向到原URL。否則,重定向到原請求的URL。
3)MarkUserLoggedOut():將SSO網(wǎng)站與用戶令牌對應(yīng)的應(yīng)用對象設(shè)置為null,標(biāo)記用戶已退出系統(tǒng)。
2.3 SSO代理模塊的設(shè)計(jì)
SSO代理模塊用于簡化信任網(wǎng)站的SSO調(diào)用,它實(shí)際上是一個動態(tài)鏈接庫(SSOProxy.DLL),由信任網(wǎng)站引用。它由信任網(wǎng)站執(zhí)行以下主要功能:1)通過Web服務(wù)與SSO網(wǎng)站通信,如身份驗(yàn)證、設(shè)置Cookie值;2)重定向到SSO站點(diǎn),請求登錄頁面或者提供請求的頁面。
SSO代理模塊中定義了一個PrivatePage類,它繼承System.Web.UI.Page類,并重寫Page類的OnLoad()事件處理方法,實(shí)現(xiàn)在裝載頁面時,讀取請求URL中的參數(shù)值,調(diào)用SSO網(wǎng)站的Web服務(wù)方法,檢查用戶的登錄狀態(tài),根據(jù)其登錄狀態(tài),重定向到SSO網(wǎng)站、原請求URL,或者退出SSO系統(tǒng)。該類定義以下主要方法:
1)LoadParameters():讀取URL的Token、Action、ReturnUrl等參數(shù)值。
2)HandlePostbackRequest():若請求是登錄頁面。則不重定向到SSO。否則,檢查用戶是否已經(jīng)登錄SSO,根據(jù)登錄狀態(tài),重定向到相應(yīng)的頁面。
3)RedirectToSSOSite():重定向SSO網(wǎng)站的授權(quán)頁面。
4)Login():調(diào)用SSO的Web服務(wù)方法,驗(yàn)證用戶身份的合法性。
5)ValidateUserStatusAndRedirect():檢查用戶狀態(tài),重定向到相應(yīng)的頁面。
2.3信任網(wǎng)站的設(shè)計(jì)
信任網(wǎng)站是SSO模型下的各種Web應(yīng)用程序。為了讓所有信任網(wǎng)站都由SSO網(wǎng)站進(jìn)行統(tǒng)一的身份認(rèn)證和授權(quán),只需要按照應(yīng)用需求設(shè)計(jì)好相應(yīng)的Web應(yīng)用程序,引用上述SSO代理類庫,并對Web應(yīng)用程序中需要保護(hù)的每個ASPX頁面的代碼類(即.aspx.cs文件)作修改,使ASPX頁面的代碼類繼承SSOProxy. PrivatePage類,而不是繼承System.Web.UI.Page類。同時對ASP.NET應(yīng)用程序的web.config配置文件添加如下內(nèi)容,指定SSO網(wǎng)站的Web服務(wù)URL、授權(quán)頁面URL,以及應(yīng)用程序自身的登錄頁面URL和默認(rèn)主頁URL。
2.3信任網(wǎng)站的注銷設(shè)計(jì)
注銷信任網(wǎng)站就是退出信任網(wǎng)站的Web應(yīng)用程序。在退出時,需要刪除瀏覽器Cookie中的用戶令牌、有效時間,并刪除SSO網(wǎng)站中與用戶令牌對應(yīng)的用戶對象。
3結(jié)束語
該文提出的.NET環(huán)境下基于Web服務(wù)的跨域單點(diǎn)登錄系統(tǒng),設(shè)計(jì)簡單,將它應(yīng)用于數(shù)字化校園管理系統(tǒng),實(shí)現(xiàn)校園網(wǎng)各種應(yīng)用的統(tǒng)一身份認(rèn)證和管理的功能。
參考文獻(xiàn):
[1]焦亞楠,胡春枝.基于SAML的跨域單點(diǎn)登錄的設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)技術(shù)與發(fā)展,2012,22(1):157-160.
[2]岳小婷. ASP. NET 2. 0單點(diǎn)登錄技術(shù)在數(shù)字化校園中的應(yīng)用[J].計(jì)算機(jī)與現(xiàn)代化,2009(5):106-109.
[3]許小東,沈士根.基于ASP. NET的單點(diǎn)登錄系統(tǒng)的研究與實(shí)現(xiàn)[J].嘉興學(xué)院學(xué)報(bào),2011,23(3):90-94.