文/夏淩雲田愛寶宋文文
随着高校信息化建設的發展,數字化校園的構建成為重要的研究方向,關于數字化校園的CAS集成方案是一個值得探讨的話題。Cacti是一個常用的開源網絡管理監測圖形分析工具,在很多高校的網絡日常管理和運維中被廣泛運用。中國石油大學(華東)使用的是CactiEZ中文漢化版,其基于CentOS6,整合了Spine,RRDTool,集成了Monitor、Syslog、Weathermap等等插件以及Apache,Squid,MySQL等等必要軟件環境,是一個功能很強大的完整Cacti中文解決方案。近來遇到了一個新需求,就是需要嘗試為CactiEZ集成數字校園的SSO(SingleSignOn,單點登錄)功能。
中國石油大學(華東)采用的數字校園系統支持CAS(CentralAuthenticationService,中央認證服務),部署了專門的CASServer為相關業務系統提供SSO登錄認證服務。CAS是由JA-SIG開發的一套基于Apache協議的開源系統,在教育行業運用很廣泛,很多高校均采用了CAS作為數字校園的單點登錄解決方案。Cacti主要采用的是php語言開發,幸運地是,JA-SIG提供了開源的CASphpClient,同時Cacti也提供了相關的用戶登錄接口,可以利用這些接口實現兩個系統的對接和集成。具體對接方法如下:
1.首先到JA-SIG官網下載最新版本的CASphp客戶端(下載地址:https://developer.jasig.org/cas-clients/php/current/),現在的最新版本為1.3.4;
2.CASphpClient需要依據DOM标準(DocumentObjectModel,文檔對象模型)對返回的web文件進行xml解析,因此需要php-dom安裝包,在CactiEZ的安裝鏡像裡是沒有默認安裝的,所以首先需要通過yuminstallphp-dom來安裝該功能;
3.解壓第一步下載的CAS-1.3.4.tgz文件,将裡面的接口文件(CAS.php文件和/CAS文件夾)放到CactiEZ的Apache發布文件夾内,默認為/var/www/html/,以便後續調用;
4.在該文件夾下再建立一個ssoLogin.php文件,主要代碼段和注釋内容如下:
/////引入和初始化CASphpClient和Cacti接口/////require_once'CAS.php';//引入CASphpClientinclude("./include/global.php");//引入Cacti接口//指定CASSever地址,端口和虛拟目錄phpCAS::client(CAS_VERSION_2_0,"211.87.***.***”,8080,"/cas");
phpCAS::setNoCasServerValidation();//不進行服務器SSL驗證
/////驗證和對接過程/////
phpCAS::forceAuthentication();//進行強制的CAS驗證
$CASuser=phpCAS::getUser();//獲取CAS驗證成功後的登錄名
$cactiuser=db_fetch_row("SELECT*FROMuser_authWHEREusername='".$CASuser."'");//根據CAS登錄名到Cacti用戶表裡查詢對應用戶if(sizeof($cactiuser)>0){
//如果該Cacti用戶存在
$user_enabled=$user["enabled"];
if($user_enabled!="on"){//判斷該用戶是否被使能
echo"用戶賬戶已被禁用.";
exit;
}
//已被使能,調用cacti接口,将登錄記錄插入到用戶日志和系統日志
db_execute("INSERTINTOuser_log(username,user_id,result,ip,time)VALUES('".$cactiuser["username"]."',".$cactiuser["id"].",1,'".$_SERVER["REMOTE_ADDR"]."',NOW())");cacti_log("LOGIN:User'".$cactiuser["username"]."'Authenticated",false,"AUTH");
//按cacti要求給SESSION賦值,用戶獲得訪問被CactiEZ授權訪問的頁面$_SESSION["sess_user_id"]=$cactiuser["id"];$firsturl=“graph_view.php”//跳轉到指定的用戶首頁面header("Location:$firsturl");
exit;
}
else{//cacti中無此用戶,記錄到cacti系統日志并提示用戶
cacti_log("LOGIN:AccessDenied",false,"AUTH");echo"無此用戶,請現在CactiEZ中新建該用戶并配置權限";exit;}
5.重啟httpd服務後,訪問fttp://CactiEZ-Server/ssoLogin.php頁面,将自動跳轉至CAS認證頁面,輸入統一身份認證用戶名密碼并通過驗證後,用戶将獲得CactiEZ的權限,并跳轉至代碼裡指定的graph_view.php頁面,單點登錄成功!
由于cacti對用戶權限控制劃分非常細緻,所以僅僅使用CAS的統一身份信息并不能對cacti用戶權限進行細分,所以在cacti系統裡,還是需要預先建立一個和CAS中欲訪問用戶名相同的本地用戶,并為其預先設置好訪問權限,否則将會提示“無此用戶,請在CactiEZ中新建該用戶并配置權限”的錯誤。因此從這方面看,可能利用CASphpClient與CactiEZ對接僅僅能起到用戶名密碼的單點登錄,對CactiEZ的用戶管理并沒有更多的幫助。但是JA-SIG除了PHP接口,還提供了.NET和JAVA等等的類似CAS接口,利用這些接口和本文思路,我們可以方便得實現各種自制或開源系統與CAS的集成,從而為這些系統實現校園統一身份認證功能。
作者單位為中國石油大學(華東)網絡及教育技術中心