CAS5.3服務(wù)器搭建及SpringBoot整合CAS解決分布式系統(tǒng)安全

單點(diǎn)登錄(Single Sign On),簡稱為 SSO,是目前比較流行的企業(yè)業(yè)務(wù)整合的解決方案之一。SSO的定義是在多個應(yīng)用系統(tǒng)中,用戶只需要登錄一次就可以訪問所有相互信任的應(yīng)用系統(tǒng)。
當(dāng)我們使用SpringCloud搭建分布式系統(tǒng)后,這些子系統(tǒng)是分別部署在不同的服務(wù)器中,那么使用傳統(tǒng)方式的session是無法解決的,我們需要使用相關(guān)的單點(diǎn)登錄技術(shù)來解決。
CAS的原理如下


image.png

從結(jié)構(gòu)上看,CAS 包含兩個部分: CAS Server 和 CAS Client。CAS Server 需要獨(dú)立部署,主要負(fù)責(zé)對用戶的認(rèn)證工作;CAS Client 負(fù)責(zé)處理對客戶端受保護(hù)資源的訪問請求,需要登錄時,重定向到 CAS Server
SSO單點(diǎn)登錄訪問流程主要有以下步驟:

  1. 訪問服務(wù):SSO客戶端發(fā)送請求訪問應(yīng)用系統(tǒng)提供的服務(wù)資源。
  2. 定向認(rèn)證:SSO客戶端會重定向用戶請求到SSO服務(wù)器。
  3. 用戶認(rèn)證:用戶身份認(rèn)證。
  4. 發(fā)放票據(jù):SSO服務(wù)器會產(chǎn)生一個隨機(jī)的Service Ticket。
  5. 驗(yàn)證票據(jù):SSO服務(wù)器驗(yàn)證票據(jù)Service Ticket的合法性,驗(yàn)證通過后,允許客戶端訪問服務(wù)。
  6. 傳輸用戶信息:SSO服務(wù)器驗(yàn)證票據(jù)通過后,傳輸用戶認(rèn)證結(jié)果信息給客戶端。

接下來搭建CAS5.3
首先到官方的gihub上下載cas,注意最新的master分支使用的需要java11,該分支使用Gradle工程
由于我使用的是java8,就使用基于5.3版本的,該版本使用Maven工程
CAS4.x的server是基于Spring的,模版引擎使用的是JSP,
CAS5.X之后使用的是基于SpringBoot的,模版引擎使用Thymeleaf,Tymeleaf比JSP要優(yōu)雅多了
https://github.com/apereo/cas-overlay-template/tree/5.3
解壓后使用maven命令打包
mvn package
把target下生成的war包重命名為cas.war放到tomcat下
啟動tomcat
找到解壓的文件

由于CAS默認(rèn)使用的是基于https協(xié)議,需要改為兼容使用http協(xié)議
到C:\apache-tomcat-8.5.33\webapps\cas\WEB-INF\classes目錄的application,properties添加如下的內(nèi)容

cas.tgc.secure=false
cas.serviceRegistry.initFromJson=true
1
2
到C:\apache-tomcat-8.5.33\webapps\cas\WEB-INF\classes\services目錄下的HTTPSandIMAPS-10000001.json
修改內(nèi)容如下,即添加http

"serviceId" : "^(https|http|imaps)://.*",
1
兼容http修改完畢,由于https協(xié)議默認(rèn)使用的端口為8443,我們修改為tomcat的8080端口
到C:\apache-tomcat-8.5.33\webapps\cas\WEB-INF\classes目錄的application,properties添加如下的內(nèi)容

server.port=8080
1
由于使用的靜態(tài)密碼為casuser::Mellon不好記憶,
修改密碼
到C:\apache-tomcat-8.5.33\webapps\cas\WEB-INF\classes目錄的application,properties的最后面修改密碼為如下

cas.authn.accept.users=admin::admin
1
CAS服務(wù)器搭建完畢,重啟tomcat
啟動成功

image

默認(rèn)用戶名和密碼cas\WEB-INF\classes\application.properties

image

用戶名:casuser 密碼:Mellon

image

CAS服務(wù)端啟動成功

CAS客戶端配置(就是自己項目)

pom.xml依賴

<dependency>
<groupId>net.unicon.cas</groupId>
<artifactId>cas-client-autoconfig-support</artifactId>
<version>2.1.0-GA</version>
</dependency>

application.properties配置文件
客戶端1
server.port=8088
cas服務(wù)端的地址
cas.server-url-prefix=http://localhost:8080/cas
cas服務(wù)端的登錄地址
cas.server-login-url=http://localhost:8080/cas/login
當(dāng)前服務(wù)器的地址(客戶端)
cas.client-host-url=http://localhost:8088
Ticket校驗(yàn)器使用Cas30ProxyReceivingTicketValidationFilter
cas.validation-type=CAS3

每個客戶端只要修改當(dāng)前服務(wù)器地址就行了
如客戶端2
server.port=8090
cas服務(wù)端的地址
cas.server-url-prefix=http://localhost:8080/cas
cas服務(wù)端的登錄地址
cas.server-login-url=http://localhost:8080/cas/login
當(dāng)前服務(wù)器的地址(客戶端)
cas.client-host-url=http://localhost:8090
Ticket校驗(yàn)器使用Cas30ProxyReceivingTicketValidationFilter
cas.validation-type=CAS3

配置完成
沒有登陸時http://localhost:8088http://localhost:8090訪問都會跳到CAS 登陸頁
只要客戶端1登陸了,登陸端2就能直接訪問,反之也能訪問

上面是通過CAS默認(rèn)的用戶名和密碼進(jìn)行登錄的,實(shí)際項目中我們的用戶名和密碼肯定是從數(shù)據(jù)庫中獲取到的
官方文檔https://apereo.github.io/cas/5.3.x/installation/Configuration-Properties.html
接下來我們就看一下怎么通過獲取數(shù)據(jù)庫的用戶進(jìn)行驗(yàn)證
配置CAS服務(wù)端
G:\google下載\cas-overlay-template-5.3的pox.xml來打開項目
pom.xml文件加上依賴
<dependency>
<groupId>org.apereo.cas</groupId>
<artifactId>cas-server-support-jdbc-drivers</artifactId>
<version>5.3.6</version>
</dependency>
<dependency>
<groupId>org.apereo.cas</groupId>
<artifactId>cas-server-support-jdbc</artifactId>
<version>5.3.6</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.46</version>
</dependency>
cmd進(jìn)入命令 mvn clean package命令的時候會重新生成一個war包
把war放到tomcat中解壓
cas\WEB-INF\classes目錄的application.properties
首先注釋掉默認(rèn)的用戶#cas.authn.accept.users=casuser::Mellon
添加如下的內(nèi)容
cas.authn.jdbc.query[0].url=jdbc:mysql://localhost:3306/cas?useUnicode=true&characterEncoding=utf-8&useSSL=true
cas.authn.jdbc.query[0].user=root
cas.authn.jdbc.query[0].password=a1234567
cas.authn.jdbc.query[0].sql=select * from user where username=?
cas.authn.jdbc.query[0].fieldPassword=password
cas.authn.jdbc.query[0].driverClass=com.mysql.jdbc.Driver

代碼示例:
https://github.com/TheWays/cas5.3

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容