王 蕾
(山東工商學(xué)院網(wǎng)絡(luò)中心,山東 煙臺 264005)
隨著高校數(shù)字化校園建設(shè)的不斷發(fā)展,高校各個部門建設(shè)了各自需要的應(yīng)用系統(tǒng),由于沒有統(tǒng)一的規(guī)劃和設(shè)計,各應(yīng)用系統(tǒng)直接沒有聯(lián)系,各自為營,每個系統(tǒng)都有一套帳號密碼,用戶將不得不按照各個應(yīng)用系統(tǒng)的要求分別登錄進(jìn)入相應(yīng)的系統(tǒng),這不僅需要多個系統(tǒng)管理員維護(hù)管理各個應(yīng)用系統(tǒng)的用戶信息庫,并且用戶需要記憶多個帳戶和口令,使用極為不便,容易混淆,同時具有很大的安全隱患。單點(diǎn)登錄技術(shù)(single sign on,SSO)在數(shù)字化校園信息集成中成為關(guān)鍵技術(shù),用戶只需一次身份驗證,就可對所有被授權(quán)的應(yīng)用系統(tǒng)或資源進(jìn)行無縫的訪問,從而提高工作效率,降低操作成本,提高系統(tǒng)的整體安全性,而且還能為進(jìn)一步的應(yīng)用系統(tǒng)集成奠定基礎(chǔ),對高校的信息化建設(shè)和發(fā)展具有十分重要的意義。
國內(nèi)單點(diǎn)登錄技術(shù)研究主要集中在高校和企業(yè),清華大學(xué)、北京大學(xué)、上海交通大學(xué)和華南理工大學(xué)都實現(xiàn)了自己的單點(diǎn)登錄系統(tǒng),這些系統(tǒng)不是很成熟,都沒有公開共享。企業(yè)有吉大正元的JITSSO系統(tǒng)和神舟融信開發(fā)的UTrust SSO系統(tǒng),這些系統(tǒng)都是商業(yè)化解決方案,可以購買使用。國內(nèi)企業(yè)如提供數(shù)字化校園解決方案都實現(xiàn)了單點(diǎn)登錄系統(tǒng),如果北京希爾、沈陽東軟、廣州聯(lián)奕統(tǒng)和金智教育,這些系統(tǒng)解決方法都是在Yale-CAS單點(diǎn)登錄技術(shù)基礎(chǔ)上修改完善實現(xiàn)的。
國外成熟的單點(diǎn)登錄解決方案中主要有:基于Psssport協(xié)議的單點(diǎn)登錄解決方案、基于SAML協(xié)議的單點(diǎn)登錄解決方案和基于Yale-CAS協(xié)議的單點(diǎn)登錄解決方案。其中微軟公司的基于Psssport協(xié)議的解決方案是基于.NET語言開發(fā)的,只能在Windows服務(wù)器上使用。基于SAML協(xié)議的單點(diǎn)登錄解決方案通過XML規(guī)范傳輸數(shù)據(jù),數(shù)據(jù)流較大時,網(wǎng)絡(luò)開銷比較大。Yale-CAS單點(diǎn)登錄解決方案由于其體系結(jié)構(gòu)設(shè)計合理、開源、配置簡單和客戶端支持廣泛等優(yōu)點(diǎn)而得到廣泛應(yīng)用。
UCenter中文意思就是“用戶中心”,是北京康盛新創(chuàng)科技有限責(zé)任公司的一款開源的一站式登錄解決方案,基于php開發(fā),擁有完善的接口,通過修改可以掛接不同架構(gòu)第三方web應(yīng)用,實現(xiàn)單點(diǎn)登錄。
P3P(Platform for Privacy Preferences(隱私設(shè)定平臺規(guī)范)是萬維網(wǎng)聯(lián)盟(W3C)公布的一項隱私保護(hù)推薦標(biāo)準(zhǔn),旨在為網(wǎng)上沖浪的Internet用戶提供隱私保護(hù)。P3P通過匹配網(wǎng)站的隱私策略(PrivacyPolicy)和用戶瀏覽器的隱私偏好(PrivacyPreference)來決定是否允許將用戶的隱私數(shù)據(jù)提供給網(wǎng)站使用,如果匹配良好,則向網(wǎng)站提供用戶隱私數(shù)據(jù),如不能完全匹配,提示用戶進(jìn)行處理。從技術(shù)上看,P3P包括了兩個組件:一個放在服務(wù)器端;另外一個放在客戶端,形成一個用戶代理。當(dāng)用戶登陸網(wǎng)站的時候,服務(wù)器端的組件根據(jù)網(wǎng)站的要求,會自動生成XML語言形式的用戶個人處理策略,這就像是貼在商店櫥窗外的公眾告示,而客戶端的組件就將這個“公眾告示”提供給用戶。
Cookie是用戶訪問過的網(wǎng)站存放在用戶硬盤驅(qū)動器上的小數(shù)據(jù)文件,可使服務(wù)提供者在下次訪問時確認(rèn)用戶的身份,并能夠用來追蹤用戶瀏覽器軌跡,以此分析用戶的興趣愛好。Cookie由服務(wù)器端生成,通過http協(xié)議的User-Agent字段發(fā)送,瀏覽器會將接收到Cookie保存到某個目錄下的文本文件內(nèi),下次訪問該網(wǎng)站時自動發(fā)送該Cookie給網(wǎng)站。正常的Cookie只能在一個應(yīng)用中共享,即一個Cookie只能由創(chuàng)建它的應(yīng)用獲得,不能跨域設(shè)置,但是單點(diǎn)登錄涉及的系統(tǒng)都是多應(yīng)用、多域名的,能夠通過p3p協(xié)議跨域設(shè)置Cookie。
網(wǎng)站程序只需要設(shè)置P3P HTTP Header,跨域設(shè)置Cookie就可以成功。
asp.net設(shè)置p3p的方法:HttpContext.Current.Response.AddHeader("p3p","CP="IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT"")。
php設(shè)置p3p的方法:header('P3P:CP="CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"')。
java設(shè)置 p3p的方法:response.addHeader("P3P","CP="CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"")。
這些標(biāo)簽就是P3P所規(guī)定的,瀏覽器會根據(jù)這些標(biāo)簽決定是否接受 cookie,實踐證明,所有瀏覽器都支持P3P,能夠設(shè)置Cookie,能夠?qū)崿F(xiàn)多域名多應(yīng)用系統(tǒng)單點(diǎn)登錄。
2.4.1 UCenter單點(diǎn)登錄流程
用戶在任一web應(yīng)用登錄界面輸入用戶和密碼進(jìn)行登錄,通過uc_client文件夾client.php中的uc_user_login函數(shù)進(jìn)行驗證,通過一系列函數(shù)調(diào)用最終通過socket和UCenter服務(wù)器進(jìn)行通訊,傳遞數(shù)據(jù)進(jìn)行驗證。如驗證通過,返回用戶ID,用戶姓名,加密密碼等信息,然后執(zhí)行uc_user_synlogin函數(shù),通過socket和UCenter服務(wù)器通訊傳遞用戶ID,UCenter服務(wù)器執(zhí)行user.php中的onsyslogin函數(shù),通過循環(huán)在UCenter服務(wù)器端下注冊的所有應(yīng)用返回在UCenter服務(wù)器端注冊的所有web應(yīng)用的js調(diào)用,js調(diào)用能夠跨域設(shè)置Cookie,腳本樣式,通過此腳本調(diào)用相應(yīng)web應(yīng)用下uc.php文件中的uc_note類中的synlogin函數(shù),syslogin函數(shù)發(fā)送p3p HTTP Header后,在相應(yīng)web應(yīng)用下添加Cookie(也可以同時設(shè)置Session),實現(xiàn)了所有web應(yīng)用的跨域單點(diǎn)登陸。
2.4.2 UCenter的單點(diǎn)登錄機(jī)制分析
簡單概況為:跨域設(shè)置用戶信息。任一web應(yīng)用socket遠(yuǎn)程打開UCenter服務(wù)器端,認(rèn)證通過,然后傳輸已經(jīng)登陸的用戶UID,UCenter服務(wù)器端循環(huán)通過JS調(diào)用各應(yīng)用下的api,在各個web應(yīng)用下設(shè)置Cookie,實現(xiàn)單點(diǎn)登錄,而保證Cookie通用的則是P3P協(xié)議的使用。單點(diǎn)登出原理相同。
UCenter系統(tǒng)中Authcode函數(shù)可以通過一個 KEY,生成動態(tài)的密文,并可以再通過這個KEY來解密,保障了系統(tǒng)傳輸信息的安全性。
首先從北京康盛新創(chuàng)科技有限責(zé)任公司官方網(wǎng)站下載UCenter 1.6.0版本代碼,在服務(wù)器上按照提示安裝,過程簡單明了,然后為UCenter配置域名。UCenter安裝完畢后,添加應(yīng)用和用戶數(shù)據(jù),添加應(yīng)用注意事項:應(yīng)用類型選擇 “其他”,應(yīng)用的主URL類似填寫http://www.xxx.com,通訊密鑰填寫不同字符,最大64字節(jié),應(yīng)用接口文件名稱一般為uc.php,但不限制于此,可根據(jù)實際情況填寫。應(yīng)用添加成功后,生成應(yīng)用配置信息,需要記錄保存。
3.2.1 基于php語言開發(fā)web應(yīng)用單點(diǎn)登錄實現(xiàn)
Web應(yīng)用只需修改登錄登出模塊即可,在Web應(yīng)用根目錄復(fù)制粘貼UCenter 1.6.0中的uc_client、api文件夾和添加config.inc.php文件,config.inc.php文件內(nèi)容是在UCenter服務(wù)器端添加應(yīng)用后生成的應(yīng)用配置信息。在Web應(yīng)用登錄模塊中,引入uc_client文件夾中的client.php文件和config.inc.php文件。
Web應(yīng)用賬戶登錄代碼為:
list($uid,$username,$password,$email)=uc_user_login($_POST[′username′],$_POST[′password′]);
setcookie(′Example_auth′,",-86400);
if($uid>0){
//用戶登陸成功,設(shè)置 Cookie,加密直接用 uc_authcode函數(shù),用
戶使用自己的函數(shù)
setcookie(′Example_auth′,uc_authcode($uid." ".$username,′ENCODE′));
//生成同步登錄的代碼
$ucsynlogin=uc_user_synlogin($uid);
echo ′登 錄 成 功 ′.$ucsynlogin.′
′;
exit;
}elseif($uid==-1){
為了在全球經(jīng)濟(jì)一體化的大環(huán)境中提高國民競爭力,同時服務(wù)一帶一路的國家戰(zhàn)略,我國的英語人才培養(yǎng)質(zhì)量需要不斷提升。面臨我國學(xué)生在英語學(xué)習(xí)方面高投入、低產(chǎn)出的現(xiàn)狀,需要學(xué)生、教師、學(xué)校、教育界乃至于出版市場,大家各方面形成合力,在教學(xué)資源、評價標(biāo)準(zhǔn)、英語環(huán)境、市場資源等方面進(jìn)行完善。通過沉浸式英語習(xí)的環(huán)境營造、教學(xué)資源的趣味化,評價標(biāo)準(zhǔn)導(dǎo)向的多元化,以及市場資源的豐富化。我們期待,在不久的將來,可以看到國民英語教育能效實現(xiàn)明顯的提升。
echo′用戶不存在,或者被刪除′;
}elseif($uid==-2){
echo ′密碼錯′;
}else{
echo ′未定義′;
}
3.2.2 基于java語言開發(fā) web應(yīng)用單點(diǎn)登錄實現(xiàn)
UCenter系統(tǒng)只提供了php版本的api客戶端,但系統(tǒng)是開源的,完全可以使用java語言實現(xiàn)相應(yīng)功能。本文使用了互聯(lián)網(wǎng)上提供的api代碼,下載地址:http://code.google.com/p/discuz-ucenter-api-forjava/,將下載的java api中的代碼添加到項目中,根據(jù)UCenter服務(wù)器端添加應(yīng)用生成的配置信息修改config.properties,web.xml中添加:
Web應(yīng)用引用java api中的XMLHelper和Client類,賬戶登錄代碼為:
Client e=new Client();
String result=e.uc_user_login("username","password");
LinkedList[String>rs=XMLHelper.uc_unserialize(result);
if(rs.size()>0){
int$uid=Integer.parseInt(rs.get(0));
if($uid>0){
System.out.println("登錄成功");
String$ucsynlogin=e.uc_user_synlogin($uid);
System.out.println("單點(diǎn)登錄成功"+$ucsynlogin);
//本地登陸代碼 //TODO.......
}else if($uid==-1){
System.out.println("用戶不存在,或者被刪除");
}else if($uid==-2){
System.out.println("密碼錯");
}else{
System.out.println("未定義");
}
至此,基于java語言開發(fā)的web應(yīng)用單點(diǎn)登錄功能實現(xiàn),單點(diǎn)登出功能類似。
本文基于康盛新創(chuàng)公司的開源產(chǎn)品UCenter系統(tǒng),實現(xiàn)了php語言和java語言開發(fā)web應(yīng)用單點(diǎn)登錄,Asp語言和.net語言開發(fā)web應(yīng)用本文沒有給出代碼,同樣也可以使用此項技術(shù)實現(xiàn)單點(diǎn)登錄,使用單點(diǎn)登錄系統(tǒng)減少了用戶的多次登錄認(rèn)證,減輕了維護(hù)人員數(shù)據(jù)維護(hù)工作量,提高了用戶便利性,具有一定的實用和推廣價值。下階段將對單點(diǎn)登錄系統(tǒng)功能、性能和安全性進(jìn)行深入研究。
[1]劉峰,王崢,等.基于CAS的門戶單點(diǎn)登錄方案[J].計算機(jī)系統(tǒng)應(yīng)用,2011,30(6).
[2]陳麗,于東海.Kerberos協(xié)議在單點(diǎn)登錄系統(tǒng)中的改進(jìn)及應(yīng)用[J].計算機(jī)系統(tǒng)應(yīng)用,2011,20(1).
[3]單曙兵,孔磊.基于Acegi授權(quán)管理的高可用單點(diǎn)登錄系統(tǒng)的研究與設(shè)計[J].計算機(jī)應(yīng)用與軟件,2013,30(7).
[4]高昊江,肖田元.基于 SAML改進(jìn)的單點(diǎn)登錄模型研究[J].計算機(jī)工程與設(shè)計,2011,32(3).