1.1 什么是單點登錄
單點登錄(Single Sign On),簡稱為 SSO,是目前比較流行的企業業務整合的解決方案之一。SSO的定義是在多個應用系統中,用戶只需要登錄一次就可以訪問所有相互信任的應用系統。
我們目前的系統存在諸多子系統,而這些子系統是分別部署在不同的服務器中,那么使用傳統方式的session是無法解決的,我們需要使用相關的單點登錄技術來解決。
1.2 什么是CAS
CAS 是 Yale 大學發起的一個開源項目,旨在為 Web 應用系統提供一種可靠的單點登錄方法,CAS 在 2004 年 12 月正式成為 JA-SIG 的一個項目。CAS 具有以下特點:
【1】開源的企業級單點登錄解決方案。
【2】CAS Server 為需要獨立部署的 Web 應用。
【3】CAS Client 支持非常多的客戶端(這里指單點登錄系統中的各個 Web 應用),包括 Java, .Net, PHP, Perl, Apache, uPortal, Ruby 等。
從結構上看,CAS 包含兩個部分: CAS Server 和 CAS Client。CAS Server 需要獨立部署,主要負責對用戶的認證工作;CAS Client 負責處理對客戶端受保護資源的訪問請求,需要登錄時,重定向到 CAS Server。下圖是 CAS 最基本的協議過程:

從結構上看,CAS 包含兩個部分: CAS Server 和 CAS Client。CAS Server 需要獨立部署,主要負責對用戶的認證工作;CAS Client 負責處理對客戶端受保護資源的訪問請求,需要登錄時,重定向到 CAS Server
SSO單點登錄訪問流程主要有以下步驟:
1. 訪問服務:SSO客戶端發送請求訪問應用系統提供的服務資源。
2. 定向認證:SSO客戶端會重定向用戶請求到SSO服務器。
3. 用戶認證:用戶身份認證。
4. 發放票據:SSO服務器會產生一個隨機的Service Ticket。
5. 驗證票據:SSO服務器驗證票據Service Ticket的合法性,驗證通過后,允許客戶端訪問服務。
6. 傳輸用戶信息:SSO服務器驗證票據通過后,傳輸用戶認證結果信息給客戶端。
1.3 CAS服務端部署
1.template下載
下載CAS 模板 Overlay Template,我這里使用 Apereo CAS 5.3.x 版本,JDK需要1.8+
地址:https://github.com/apereo/cas-overlay-template/tree/5.3
1. 解壓下載的zip壓縮包
2. 解壓后使用maven命令打包
mvn package
3. 把target下生成的war包重命名為cas.war放到tomcat下
4. 啟動tomcat
5. 找到解壓的文件
由於CAS默認使用的是基於https協議,需要改為兼容使用http協議
到D:\software\apache-tomcat-8.5.43\webapps\cas\WEB-INF\classes(這是我的目錄,去你對應目錄下找,不要找錯啊,實在不行用everything搜索吧)目錄的application,properties添加如下的內容
cas.tgc.secure=false cas.serviceRegistry.initFromJson=true
到D:\software\apache-tomcat-8.5.43\webapps\cas\WEB-INF\classes\services目錄下的HTTPSandIMAPS-10000001.json
修改內容如下,即添加http
"serviceId" : "^(https|http|imaps)://.*",
兼容http修改完畢,由於https協議默認使用的端口為8443,我們修改為tomcat的8080端口
到D:\software\apache-tomcat-8.5.43\webapps\cas\WEB-INF\classes目錄的application,properties添加如下的內容
server.port=8080
由於默認的用戶名和密碼為casuser::Mellon不好記憶,
修改用戶名和密碼(根據需要修改成自己想要的)
到D:\software\apache-tomcat-8.5.43\webapps\cas\WEB-INF\classes目錄的application,properties的最后面修改密碼為如下
cas.authn.accept.users=yyh::123456
CAS服務器搭建完畢,重啟tomcat 進行測試,在瀏覽器中輸入http://localhost:8080/cas/login或者http://localhost:8080/cas,
即可跳轉到cas服務登錄界面,如下圖:

輸入賬號和密碼,即可登入,如下圖:

在瀏覽器輸入http://localhost:8080/cas/logout即可退出服務,如下圖:

1.4 客戶端搭建
接下來搭建springboot項目的客戶端1
在新建的springboot項目的pom.xml添加如下依賴(匹配對應的版本)
<dependency>
<groupId>net.unicon.cas</groupId>
<artifactId>cas-client-autoconfig-support</artifactId>
<version>2.1.0-GA</version>
</dependency>
在resources下新建application.properties(或者application.yml)
server.port=8088 #cas服務端的地址 cas.server-url-prefix=http://localhost:8080/cas #cas服務端的登錄地址 cas.server-login-url=http://localhost:8080/cas/login #當前服務器的地址(客戶端) cas.client-host-url=http://localhost:8088 #Ticket校驗器使用Cas30ProxyReceivingTicketValidationFilter cas.validation-type=cas3
如果新建的是application.yml
server:
port: 8088
cas: server-url-prefix: http://localhost:8080/cas server-login-url: http://localhost:8080/cas/login client-host-url: http://localhost:8088 validation-type: cas3
在java下新建一個com.learn包,在包下新建一個Application 類,代碼如下:
import net.unicon.cas.client.configuration.EnableCasClient; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication;
#啟動CAS @EnableCasClient @EnableCasClient @SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } }
在新建一個測試類CasTest1,代碼如下:
import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController @EnableAutoConfiguration public class CasTest1 { @RequestMapping("/test1") public String test1(){ return "test1...."; } }
接下來搭建springboot項目的客戶端2
方式同理,不同的是在resources下新建application.properties(或者application.yml)的server.port的端口號進行修改,如下:
server.port=8090 #cas服務端的地址 cas.server-url-prefix=http://localhost:8080/cas #cas服務端的登錄地址 cas.server-login-url=http://localhost:8080/cas/login #當前服務器的地址(客戶端) cas.client-host-url=http://localhost:8090 #Ticket校驗器使用Cas30ProxyReceivingTicketValidationFilter cas.validation-type=cas3
客戶端1,客戶端2和cas服務器搭建好之后,接下來我們進行測試:
1. 首先啟動上面步驟中放置了cas的tomca服務器,進入D:\software\apache-tomcat-8.5.43\bin目錄下,找到startup.bat,雙擊,即可啟動。
2. 啟動客戶端1和客戶端2,在瀏覽器中輸入http://localhost:8088/test1
即跳轉到cas登錄驗證界面,如下圖:

在不登錄的情況下,在瀏覽器另一窗口輸入客戶端2,即在瀏覽器中輸入http://localhost:8090/test2
同樣,進入到了cas登錄驗證界面,如下圖:

當我們在其中一個登錄界面登錄賬號后(假設登錄客戶端2)就會跳轉到登陸后的界面,如下圖:

我們再次在瀏覽器窗口重新輸入客戶端1,http://localhost:8088/test1,或者在剛剛輸入客戶端頁面重新刷新
不用登錄即可進入頁面,如下圖:

至此,整個單點登錄的測試就結束。
開通了CSDN,歡迎訪問:https://blog.csdn.net/yyhdyp/article/details/98449953
