1. 程式人生 > 其它 >CAS5.3伺服器搭建及SpringBoot整合CAS實現單點登入

CAS5.3伺服器搭建及SpringBoot整合CAS實現單點登入

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://gitee.com/richard9/cas-springboot.git cas目錄下

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 客戶端搭建

程式碼在https://gitee.com/richard9/cas-springboot.git

接下來搭建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,或者在剛剛輸入客戶端頁面重新重新整理

不用登入即可進入頁面,如下圖:

至此,整個單點登入的測試就結束。