杜焱喆
摘要:在網(wǎng)絡(luò)技術(shù)日益發(fā)達(dá)的今天,高校校園網(wǎng)中出現(xiàn)了越來越多的應(yīng)用系統(tǒng),各應(yīng)用系統(tǒng)之間沒有采用統(tǒng)一的用戶賬號(hào),密碼和相同的身份驗(yàn)證方式,導(dǎo)致用戶無法實(shí)現(xiàn)登錄一次,多系統(tǒng)漫游,為了解決這個(gè)問題,該文提出了一種基于CAS-中心認(rèn)證服務(wù)技術(shù)的單點(diǎn)登錄及統(tǒng)一身份認(rèn)證系統(tǒng),對(duì)用戶實(shí)行統(tǒng)一的身份認(rèn)證,從而實(shí)現(xiàn)將應(yīng)用系統(tǒng)孤島連成應(yīng)用系統(tǒng)島群。提高了用戶體驗(yàn),并為將來的應(yīng)用數(shù)據(jù)對(duì)接打下了堅(jiān)實(shí)基礎(chǔ)。
關(guān)鍵詞:校園網(wǎng);CAS;單點(diǎn)登錄
中圖分類號(hào):TP393 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2015)05-0074-02
隨著“互聯(lián)網(wǎng)+”時(shí)代的到來,校園網(wǎng)的發(fā)展已經(jīng)走過二十多個(gè)年頭,學(xué)校在校園網(wǎng)內(nèi)部建設(shè)了各種各樣的業(yè)務(wù)系統(tǒng),這些業(yè)務(wù)系統(tǒng)都是獨(dú)立開發(fā)的,采用的技術(shù)和數(shù)據(jù)標(biāo)準(zhǔn)都不一致。例如財(cái)務(wù)會(huì)計(jì)、協(xié)同辦公、教務(wù)管理、圖書管理等等。系統(tǒng)管理員必須為每套系統(tǒng)導(dǎo)入用戶身份信息,當(dāng)用戶信息發(fā)生變化時(shí),需要到每個(gè)系統(tǒng)中去修改身份數(shù)據(jù)。這種情況在每個(gè)高校的校園網(wǎng)建設(shè)過程中都普遍存在。
我們需要找到一個(gè)解決方案能更加有效地管理校園網(wǎng)的業(yè)務(wù)系統(tǒng),必須簡(jiǎn)化系統(tǒng)賬號(hào)管理,減少用戶操作,這是所有校園網(wǎng)遇到的共性問題。本項(xiàng)目的研究意義也就在此,旨在為校園網(wǎng)用戶找到一個(gè)好的解決方案,實(shí)現(xiàn)單點(diǎn)登錄和統(tǒng)一身份論證。
1 CAS技術(shù)概況
CAS(Central Authentication Service – 中心認(rèn)證服務(wù))主要是為了讓內(nèi)部的多個(gè)不同業(yè)務(wù)系統(tǒng)能協(xié)同工作并通過統(tǒng)一的身份認(rèn)證系統(tǒng)驗(yàn)證用戶合法性[1]。通過CAS認(rèn)證的用戶將使用CAS認(rèn)證系統(tǒng)頒發(fā)的證書在CAS認(rèn)證范圍內(nèi)的各系統(tǒng)之間自由訪問,不需要再次登錄[2]。
從系統(tǒng)結(jié)構(gòu)上看,CAS 包含了CAS Server(服務(wù)端)和 CAS Client(客戶端)兩個(gè)部分。CAS Server 需要獨(dú)立安裝部署,主要用來負(fù)責(zé)對(duì)用戶進(jìn)行認(rèn)證;CAS Client 負(fù)責(zé)處理對(duì)客戶端受保護(hù)資源的訪問請(qǐng)求[3]。圖1是 CAS 的認(rèn)證機(jī)制。
2 單點(diǎn)登錄流程
在進(jìn)行單點(diǎn)登錄認(rèn)證時(shí),主要涉及Session和Cookie這兩個(gè)概念[4]。Session是指一個(gè)會(huì)話的連接保持時(shí)間,如果用戶長(zhǎng)時(shí)間未操作,系統(tǒng)就會(huì)自動(dòng)斷開這個(gè)會(huì)話連接,以便釋放資源也可供其他用戶連接。Cookie就是應(yīng)用系統(tǒng)在客戶機(jī)留下的一串標(biāo)識(shí)資料,通過這個(gè)標(biāo)識(shí)可以告訴應(yīng)用系統(tǒng)該用戶曾經(jīng)登錄過[5]。
由圖2可以看出,在進(jìn)行用戶身份認(rèn)證時(shí),CAS Server會(huì)先檢測(cè)是否存在Session,如果沒有檢測(cè)到Session,就會(huì)檢查客戶端是否存在Cookie。如果Cookie存在,就繼續(xù)檢測(cè)Cookie有沒有過期,如果Cookie失效,則返回登錄頁(yè)面;若有效,則CAS Server根據(jù)Cookie上的信息進(jìn)行身份驗(yàn)證,驗(yàn)證通過后創(chuàng)建一個(gè)新Session,進(jìn)入應(yīng)用系統(tǒng)。這樣既可以避免用戶反復(fù)登錄驗(yàn)證,也可以更有效地利用資源。
3 系統(tǒng)實(shí)現(xiàn)
系統(tǒng)設(shè)計(jì)中主要包括以下兩方面的內(nèi)容:一是當(dāng)輸入某個(gè)應(yīng)用系統(tǒng)地址,重定向到統(tǒng)一認(rèn)證界面的URL地址上,身份認(rèn)證通過后轉(zhuǎn)回該應(yīng)用系統(tǒng),此時(shí)同時(shí)進(jìn)入其他應(yīng)用系統(tǒng)也是無需認(rèn)證直接進(jìn)入的;二是用戶直接訪問統(tǒng)一身份認(rèn)證界面,身份認(rèn)證通過后,在統(tǒng)一門戶平臺(tái)上列出各應(yīng)用圖標(biāo),點(diǎn)擊圖標(biāo)統(tǒng)就可以直接進(jìn)入各應(yīng)用系統(tǒng)。以下是實(shí)施方法:
1)將CAS Client Jar客戶端包放在需集成的應(yīng)用系統(tǒng)的WEB-INF/lib文件夾下。
2) 在需集成的應(yīng)用系統(tǒng)中增加XML配置文件。
在集成系統(tǒng)的WEB-INF/classes目錄下新增casFilterConfig.xml配置文件,,代碼演示如下:
<?xml version="1.0" encoding="UTF-8"?>
……
3) 修改應(yīng)用系統(tǒng)登錄入口。
此處是單點(diǎn)登錄實(shí)現(xiàn)的關(guān)鍵,有兩種方案,分別介紹如下:
①方案一:保留原有系統(tǒng)的入口,新增單點(diǎn)登錄入口,新增的入口與統(tǒng)一門戶集成
在需集成的應(yīng)用系統(tǒng)的WEB-INF目錄下的配置文件web.xml中,加入CAS Filter相關(guān)的過濾器配置內(nèi)容,代碼如下:
本次系統(tǒng)設(shè)計(jì)采用JSP語言,以上是新增的入口配置文件ecjtucas.jsp,放置在應(yīng)用系統(tǒng)的根目錄下。
接下來是新增入口的代碼實(shí)現(xiàn):
引入cas認(rèn)證類代碼:
<%@ page import=" cn.edu.ecjtu.cas.tp.sso.client.filter.CASFilterRequestWrapper" %>
/*認(rèn)證類引入*/
CASFilterRequestWrapper reqWrapper=new CASFilterRequestWrapper(request);
String userID = reqWrapper.getRemoteUser(); /*獲得正在驗(yàn)證的用戶賬號(hào)*/
登錄代碼:
首先獲得正在驗(yàn)證的用戶帳號(hào),然后在應(yīng)用系統(tǒng)中判斷這個(gè)用戶是否存在:如果存在,則認(rèn)證通過;如果不存在,按照應(yīng)用系統(tǒng)業(yè)務(wù)邏輯處理。認(rèn)證通過后,從request返回的參數(shù)中獲取redirectUrl:如果為空,則跳轉(zhuǎn)到應(yīng)用系統(tǒng)的首頁(yè);如果不為空,則跳轉(zhuǎn)到參數(shù)值中的頁(yè)面。
String Redirecturstrl = request.getParameter("redirectUrl");
if(Redirecturstr != null&& Redirecturstr.length() > 0) {
response.sendRedirect(Redirecturstr);
}else{
response.sendRedirect("http://*.ecjtu.edu.cn");
}
②方案二:封閉原有登錄入口,統(tǒng)一使用CAS認(rèn)證入口。
在需集成的應(yīng)用系統(tǒng)WEB-INF目錄下的web.xml文件中,加入CAS Filter相關(guān)的過濾器配置。
應(yīng)用系統(tǒng)統(tǒng)一CAS認(rèn)證入口代碼如下:
<%@ page import=" cn.edu.ecjtu.cas.tp.sso.client.filter.CASFilterRequestWrapper" %>
/*認(rèn)證類引入*/
CASFilterRequestWrapper reqWrapper=new CASFilterRequestWrapper(request);
String userID = reqWrapper.getRemoteUser();
/*改變?cè)械膸ぬ?hào)密碼獲取方式,采用統(tǒng)一認(rèn)證獲取賬號(hào)密碼*/
4 結(jié)束語
本文詳細(xì)介紹了CAS-中心認(rèn)證服務(wù)技術(shù)的原理及工作流程,并采用CAS技術(shù)設(shè)計(jì)與實(shí)現(xiàn)了單點(diǎn)登錄和統(tǒng)一身份認(rèn)證。用戶只需在業(yè)務(wù)系統(tǒng)或統(tǒng)一認(rèn)證界面登錄一次,即可在多個(gè)應(yīng)用系統(tǒng)之間來回切換,不需要再次驗(yàn)證用戶賬號(hào)及密碼。目前,統(tǒng)一身份認(rèn)證已成功部署,并正常運(yùn)行。本系統(tǒng)的不足之處在于,針對(duì)各應(yīng)用系統(tǒng)的情況要導(dǎo)入客戶端包,并進(jìn)行一些代碼修改,在應(yīng)用系統(tǒng)協(xié)調(diào)方面仍存在問題,需要進(jìn)一步思考完善并解決。
參考文獻(xiàn):
[1] 張劍. 基于CAS的高校單點(diǎn)登錄系統(tǒng)研究及設(shè)計(jì)[J]. 軟件導(dǎo)刊:教育技術(shù),2015(7): 60-62.
[2] 蘇星曄,徐方南. 統(tǒng)一身份認(rèn)證技術(shù)研究[J]. 中國(guó)新通信,2015(2):58.
[3] 楊薇,劉陽. 基于CAS的統(tǒng)一權(quán)限平臺(tái)的設(shè)計(jì)與實(shí)現(xiàn)[J]. 艦船電子工程,2014(1):112-115.
[4] 吳曉潔. 基于CAS的單點(diǎn)登錄系統(tǒng)的實(shí)現(xiàn)[J]. 科技信息,2013(26):290-291.
[5] 董丹. 高校自主開發(fā)校園信息化平臺(tái)研究[J]. 吉林省教育學(xué)院學(xué)報(bào):中旬,2013(12): 77-78.