鄭健
摘要:統(tǒng)一身份認(rèn)證系統(tǒng)是校園信息化的重要基礎(chǔ)設(shè)施,CAS可提供企業(yè)級的單點(diǎn)登錄服務(wù),有著開放且文檔完備的協(xié)議,支持?jǐn)?shù)據(jù)庫、LDAP等多種認(rèn)證方式,可滿足師生使用校內(nèi)信息系統(tǒng)時(shí)單點(diǎn)登錄的需求。
關(guān)鍵詞:CAS;MySQL;LDAP;統(tǒng)一身份認(rèn)證;單點(diǎn)登錄
中圖分類號:TP315? ? ? 文獻(xiàn)標(biāo)識碼:A
文章編號:1009-3044(2019)23-0061-03
開放科學(xué)(資源服務(wù))標(biāo)識碼(OSID):
Deployment of Campus Unified Identity Authentication System Based on CAS
ZHENG Jian
(Suzhou Industrial Park Institute of Vocational Technology, Suzhou 215123, China)
Abstract: Unified identity authentication system is an important infrastructure of campus informatization. CAS can provide enterprise-level single sign-on service. It has an open and well-documented protocol, supports database, LDAP and other authentication methods. It can meet the needs of teachers and students when using campus information systems.
Key words: CAS; MySQL; LDAP; unified identity authentication; Single Sign-On (SSO)
1 概述
隨著校園信息化的發(fā)展,各個(gè)業(yè)務(wù)部門都建立了相應(yīng)的信息化應(yīng)用系統(tǒng),但存在的問題也日益凸顯:一是各個(gè)系統(tǒng)的基礎(chǔ)數(shù)據(jù)不統(tǒng)一,難以互通,造成大量信息孤島;二是各個(gè)業(yè)務(wù)系統(tǒng)都使用不同的賬號、密碼體系,給用戶使用造成諸多不便。
因此,建立統(tǒng)一身份認(rèn)證系統(tǒng)顯得尤為迫切。通過校園統(tǒng)一身份認(rèn)證系統(tǒng),為用戶提供數(shù)字身份管理與認(rèn)證服務(wù);校內(nèi)師生通過認(rèn)證后,即可獲得學(xué)校相關(guān)信息系統(tǒng)與資源的訪問授權(quán)。
統(tǒng)一身份認(rèn)證系統(tǒng)通常包括用戶管理、權(quán)限管理、單點(diǎn)登錄等子系統(tǒng)。一直以來很多軟件廠商都在著力開發(fā)單點(diǎn)登錄系統(tǒng),如微軟的 .NET passport、Sun主導(dǎo)研發(fā)的Liberty Alliance Project等,此外還有不少開源項(xiàng)目,如CAS、CoSign、JOSSO等。
2 CAS系統(tǒng)簡介
CAS(Central Authentication Service)源于耶魯大學(xué)發(fā)起的獨(dú)立于平臺的單點(diǎn)登錄開源項(xiàng)目,為Web應(yīng)用提供可靠的認(rèn)證服務(wù)。它能將分布在組織內(nèi)部的異構(gòu)系統(tǒng)的認(rèn)證工作集中到一起,允許用戶使用一組登錄憑據(jù)(如用戶名和密碼)來訪問多個(gè)應(yīng)用程序。用戶通過驗(yàn)證后,即可訪問被授予權(quán)限的所有應(yīng)用程序,并在用戶的同一會(huì)話期間切換應(yīng)用程序時(shí),自動(dòng)忽略相應(yīng)的身份驗(yàn)證請求提示。
CAS可提供企業(yè)級的單點(diǎn)登錄服務(wù),其優(yōu)勢在于:提供開源的Java服務(wù)器組件;有著開放且文檔完備的協(xié)議;以插件形式提供LDAP、數(shù)據(jù)庫、X.509、RADIUS、雙因子等多種認(rèn)證方式;支持CAS、SAML、OAuth、OpenID等多種協(xié)議;支持Java、.Net、PHP、Perl、Python、Apache、uPortal等跨平臺的不同客戶端。CAS系統(tǒng)架構(gòu)圖如圖1所示。
CAS采用了Spring框架,用戶通過簡單的配置就可實(shí)現(xiàn)系統(tǒng)功能的自定義。CAS主要由兩個(gè)相互協(xié)作的部分組成:CAS服務(wù)器和CAS客戶端,它們可以通過多種協(xié)議進(jìn)行通信。
CAS服務(wù)器主要是通過頒發(fā)和驗(yàn)證票據(jù)來認(rèn)證用戶并授予對啟用CAS的服務(wù)(即CAS客戶端)的訪問權(quán)限。在用戶成功登錄后,服務(wù)器發(fā)出TGT(ticket-granting tickets)并創(chuàng)建SSO會(huì)話。ST(service tickets)通過用TGT作為令牌的瀏覽器重定向,發(fā)布給用戶請求的服務(wù)。隨后通過反向信道通信,在CAS服務(wù)器上驗(yàn)證ST。
CAS客戶端是任何啟用CAS的應(yīng)用程序,可以通過支持的協(xié)議與服務(wù)器通信。CAS客戶端也是一個(gè)軟件包,可以與各種軟件平臺和應(yīng)用程序集成,以便通過某種身份認(rèn)證協(xié)議(如CAS、SAML、OAuth)與CAS服務(wù)器進(jìn)行通信。經(jīng)過改造的客戶端不再負(fù)責(zé)認(rèn)證工作,而是將認(rèn)證請求重定向到CAS服務(wù)器進(jìn)行處理。
3 CAS系統(tǒng)部署
根據(jù)目前CAS官網(wǎng)發(fā)布的系統(tǒng)維護(hù)策略,5.3.x版本將支持到2020年7月29日,甚至晚于目前最新的6.1.x版本,因此目前系統(tǒng)部署建議采用相對成熟的5.3.x版本。
CAS系統(tǒng)的運(yùn)行要求有JDK支持,建議使用Tomcat作為Servlet容器,Maven或Gradle作為構(gòu)建工具。
主要部署過程如下:
1) 安裝JDK 1.8、Apache Maven 3.6等支持軟件。安裝完成后,分別使用javac –version、java –version、mvn -v 命令檢查軟件版本是否正確。
2) 安裝Apache Tomcat 9,完成后測試http://服務(wù)器地址:8080 是否正常打開。
3) 為服務(wù)器配置SSL證書。
由于CAS服務(wù)器進(jìn)行身份驗(yàn)證過程中需要傳輸安全憑據(jù),而且CAS的TGT是不記名令牌,因此所有通信必須通過安全通道(如TLS v1)進(jìn)行傳輸。Tomcat支持PFX格式和JKS兩種格式的SSL證書。這里以阿里云的SSL證書為例,在下載了Tomcat證書后,可得到一個(gè)證書文件(.pfx文件)和一個(gè)密碼文件(.txt文件)。輸入以下Java JDK命令將PFX格式的證書轉(zhuǎn)換成JKS格式:
keytool -importkeystore -srckeystore 證書文件名.pfx -destkeystore 服務(wù)器域名.jks -srcstoretype PKCS12 -deststoretype JKS
接下來配置https協(xié)議。在Tomcat安裝目錄下新建cert目錄,將JKS格式的證書和密碼文件復(fù)制到cert目錄下。打開Tomcat安裝目錄下conf中的server.xml文件,將以下配置內(nèi)容前后的注釋符號刪除,修改配置信息:
保存配置文件后,重新啟動(dòng)Tomcat服務(wù),測試是否可以通過https協(xié)議(https://服務(wù)器地址:8443)訪問Tomcat。
4) 安裝CAS軟件。
CAS的安裝是面向源代碼的過程,因此推薦使用WAR overlay的方式,這樣可以自定義組件的配置、UI的設(shè)計(jì)等。
首先從https://github.com/apereo/cas-overlay-template 獲取CAS Overlay Template代碼,然后修改pom.xml文件中的配置信息,以便加載所需的組件。接下來運(yùn)行 ./build.sh? package 命令,獲得cas.war文件,并部署到Tomcat中。
5) 配置認(rèn)證方式。
CAS部署完成后,可以使用默認(rèn)用戶名casuser和密碼Mellon登錄以測試系統(tǒng)是否工作正常。但在實(shí)際應(yīng)用中,用戶賬戶信息通常存儲(chǔ)在數(shù)據(jù)庫或LDAP服務(wù)器中進(jìn)行管理。下面分別介紹這兩種認(rèn)證方式的配置。
1 連接MySQL數(shù)據(jù)庫進(jìn)行認(rèn)證
首先修改pom.xml文件,在
在針對Tomcat的配置信息部分
然后運(yùn)行 ./build.sh? package 命令,獲得cas.war文件。編輯其中的 WEB-INF/classes/application.properties 文件,將最后一行 cas.authn.accept.users=casuser::Mellon 加井號注釋掉,再加入以下內(nèi)容:
cas.authn.jdbc.query[0].driverClass=com.mysql.jdbc.Driver
cas.authn.jdbc.query[0].url=jdbc:mysql://mysqlserver:3306/sso?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&useSSL=false