【GitLab、Jira、Confluence 單點登錄實現】之 CAS 系統部署

CAS 系統部署

一、CAS 部署可以採用的方式

CAS作爲一款成熟的開源SSO系統,應該部署起來非常容易。但實際部署過程中,因爲衆所周知的網絡原因,沒少花費時間,最終探索出來一條順利的渠道。

嘗試1、採用docker方式(首先嚐試的方法,太慢了~~ 網絡不行的話就不要用這個方法了)

docker pull apereo/cas:v5.3.10
docker run --name cas -p 8443:8443 -p 8878:8080 apereo/cas:v5.3.10 /bin/sh /cas-overlay/bin/run-cas.sh

嘗試2、下載CAS 源碼,編譯打包方式。(不推薦,源碼太大,下載不下來)

源碼地址:https://github.com/apereo/cas

而且在源碼的介紹內容中,也說明了

It is recommended to deploy CAS locally using the WAR Overlay method. Cloning or downloading the CAS codebase is ONLY required if you wish to contribute to the development of the project.

嘗試3、war overlay installation 方式 (推薦,此方式順利完成)

War-Overlay 是一種避免重複代碼的簡化部署工作策略,overlay無需從cas源代碼開始構建,而是允許下載預編譯好的war包,並將自己特性的內容(覆蓋物)插入或覆蓋其中。可以覆蓋的組件可能包括資源文件、java類、圖像、css樣式、js文件等。如果是覆蓋預編譯war中的內容,則要在工程中建立完全相同的路徑和文件名稱。

二、overlay方式部署CAS Server

2.1 下載CAS OVERLAY 代碼,通過git clone 或者直接下載zip。導入IDE中,方便修改配置(我用的STS)。

git clone https://github.com/apereo/cas-overlay-template

注意一:(還是爲了速度)版本選擇5.3.9,因爲阿里雲的倉庫上cas-server-webapp-tomcat只更新到了5.3.9。註釋掉pom文件中的sonatype的repositories設置,從阿里雲倉庫下載。(我已經配置maven阿里雲倉庫設置)。 注意不要註釋 shibboleth-releases,支持jdbc需要的依賴包阿里雲上沒有。

*注意二:配置shibboleth-releases的倉庫url爲https,需要配置jdk證書才能訪問 *
在這裏插入圖片描述

2.2 設置http訪問支持。CAS默認只可以使用https進行訪問。

2.2.1、創建所需目錄結構

a、新建src/main/resources 代碼目錄,工程右鍵,new-> Source Folder,輸入src/main/resources。

b、在resources下創建目錄 services文件夾。

2.2.2、獲取默認的cas.war文件,以便提取將要覆蓋的配置文件

a、在項目上右鍵 -> Show in Local Terminal -> Terminal 打開終端。 執行 build.cmd package,完成後,目錄下增加target\cas.war。可以獲取到默認的war包。

2.2.3、從war中獲取將要修改的配置文件

a、拷貝文件 target/cas.war!WEB-INF/classes/application.properties,放到src/main/resources目錄下。

b、拷貝文件 target/cas.war!WEB-INF/classes/services/HTTPSandIMAPS-10000001.json,放到services目錄下。

2.2.4、修改配置文件支持http訪問

a、application,properties添加如下的內容

cas.tgc.secure=false
cas.serviceRegistry.initFromJson=true
server.port=8080

b、HTTPSandIMAPS-10000001.json 修改內容如下,即添加http

"serviceId" : "^(https|http|imaps)://.*",

c、現在再打包出來的war包即可直接放到tomcat上部署,可以使用http訪問,默認用戶名和密碼在properties中 casuser::Mellon,訪問地址:127.0.0.1:8080/cas.

2.3 採用jdbc方式獲取認證信息配置

2.3.1、爲了簡化配置,避免包引用衝突,配置BOM

(不瞭解bom作用的轉到:參考文檔:Maven之Spring BOMMaven官方文檔)。修改pom文件,設置parent 如下即可。這樣文件中可以去掉${cas.version}配置。

<parent>
    <groupId>org.apereo.cas</groupId>
    <artifactId>cas-server-support-bom</artifactId>
</parent>

2.3.2、項目添加數據庫驅動

配置pom.xml,添加cas-server-support-jdbc(配置了BOM,所以不用寫版本號了),此處使用依賴cas-server-support-jdbc-drivers的方式引入mysql-connector-java(注意引入的版本爲8.0.11,驅動類和連接串的寫法與5.x有區別)。

<!--新增支持jdbc驗證-->
<dependency>
	<groupId>org.apereo.cas</groupId>
	<artifactId>cas-server-support-jdbc</artifactId>
</dependency>
<!--數據庫驅動依賴-->
<dependency>
	<groupId>org.apereo.cas</groupId>
	<artifactId>cas-server-support-jdbc-drivers</artifactId>
</dependency>

2.3.3、創建系統用戶表、並初始化數據(此處密碼採用不加鹽的MD5)

create table sys_user (
 `id` int(11) not null auto_increment,
 `username` varchar(30) not null,
 `password` varchar(64) not null,
 `expired` int,     -- 是否過期
 `disabled` int,    -- 是否禁用
 `locked` int,      -- 是否鎖定
  primary key (`id`)
);
/*正常用戶*/
insert into sys_user values ('1','admin','e10adc3949ba59abbe56e057f20f883e',0, 0, 0);
insert into sys_user values ('2','gitlab','e10adc3949ba59abbe56e057f20f883e',0, 0, 0);
/*禁用賬戶*/
insert into sys_user values('3','jinyong','e10adc3949ba59abbe56e057f20f883e',0, 1, 0);
/*過期賬戶*/
insert into sys_user values('4','guoqi','e10adc3949ba59abbe56e057f20f883e',1, 0, 0);
/*鎖定賬戶*/
insert into sys_user values('5','suoding','e10adc3949ba59abbe56e057f20f883e',0, 0, 1);

2.3.4、application.properties 配置

##
# Query Database Authentication 數據庫查詢校驗用戶名開始
#
# 查詢賬號密碼sql,必須包含密碼字段
cas.authn.jdbc.query[0].sql=select * from sys_user where username=?
cas.authn.jdbc.query[0].fieldPassword=password
cas.authn.jdbc.query[0].fieldExpired=expired
cas.authn.jdbc.query[0].fieldDisabled=disabled
cas.authn.jdbc.query[0].dialect=org.hibernate.dialect.MySQLDialect

cas.authn.jdbc.query[0].driverClass=org.hibernate.dialect.MySQLDialect
cas.authn.jdbc.query[0].url=jdbc:bonc:mysql://127.0.0.1:3306/bonc_cas?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&autoReconnect=true&useSSL=false
cas.authn.jdbc.query[0].user=root
cas.authn.jdbc.query[0].password=xxxx

#默認加密策略,通過encodingAlgorithm來指定算法,默認NONE不加密
cas.authn.jdbc.query[0].passwordEncoder.type=DEFAULT
cas.authn.jdbc.query[0].passwordEncoder.characterEncoding=UTF-8
cas.authn.jdbc.query[0].passwordEncoder.encodingAlgorithm=MD5

引入的數據庫驅動版本,及對應的驅動類路徑。

很多文檔上連接mysql數據庫都是 com.mysql.jdbc.Driver,

以上配置,如驅動,查詢數據庫等等需要根據不同的場景進行調整

  • 若密碼無加密,調整passwordEncoder.type=NONE
  • 若密碼加密策略爲SHA,調整passwordEncoder.encodingAlgorithm=SHA
  • 若算法爲自定義,實現org.springframework.security.crypto.password.PasswordEncoder接口,並且把類名配置在passwordEncoder.type

2.4 編輯打包部署

在項目根路徑下執行 build.cmd package
完成後即生成target目錄,下面有cas.war 文件。放到tomcat即可運行

踩過的坑:

一、數據庫連接驅動。採用依賴cas-server-support-jdbc-drivers的方式引入mysql-connector-java 的版本爲8.0.11。使用8.x需要注意的是:

1、驅動類不是com.mysql.jdbc.Driver,而是com.mysql.cj.jdbc.Driver

2、連接字符串需要配置:serverTimezone=Asia/Shanghai 和 useSSL=false

二、maven配置了https的倉庫時候,需要向jdk導入證書。

如果不導入證書,報錯信息大致如下
maven PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path

1、google瀏覽器(其它應該也行,我用的google)。打開https的網址->點擊地址欄前的小鎖->點擊證書->在彈框中選擇第二個tab頁 (詳細信息)->複製到文件。後面默認即可。我選擇的路徑爲D:/https-shibboleth.net-nexus.cer.

2、以管理員身份運行 cmd終端,導入證書。

cd %JAVA_HOME%\jre\lib\security
keytool -keystore cacerts -importcert -alias nexussecureca -file D:/https-shibboleth.net-nexus.cer -storepass changeit

命名解釋:-keystore cacerts 選擇證書庫 cacerts。

​ -alias nexussecureca 設置導入證書的別名爲nexussecureca

​ -file xxxxx 設置導入證書的文件路徑

​ -storepass changeit 設置證書庫需要密碼 changeit爲默認密碼

3、設置完成後再執行maven更新,即可正常下載依賴文件。

參考文檔:

WAR Overlay Installation

CAS Database Authentication

Cas 5.2.x版本使用 —— 單點登錄JDBC認證

使用cas-overlay-template搭建cas服務器

發佈了33 篇原創文章 · 獲贊 16 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章