CAS5.3服務器搭建及SpringBoot整合CAS解決分佈式系統安全

單點登錄概念

單點登錄(Single Sign On),簡稱爲 SSO,是目前比較流行的企業業務整合的解決方案之一。SSO的定義是在多個應用系統中,用戶只需要登錄一次就可以訪問所有相互信任的應用系統。

當我們使用SpringCloud搭建分佈式系統後,這些子系統是分別部署在不同的服務器中,那麼使用傳統方式的session是無法解決的,我們需要使用相關的單點登錄技術來解決

SSO單點登錄主要流程步驟

  1. 訪問服務:SSO客戶端發送請求訪問應用系統提供的服務資源。
  2. 定向認證:SSO客戶端會重定向用戶請求到SSO服務器。
  3. 用戶認證:用戶身份認證。
  4. 發放票據:SSO服務器會產生一個隨機的Service Ticket。
  5. 驗證票據:SSO服務器驗證票據Service Ticket的合法性,驗證通過後,允許客戶端訪問服務。
  6. 傳輸用戶信息:SSO服務器驗證票據通過後,傳輸用戶認證結果信息給客戶端。

搭建CAS5.3單點登錄服務器

1. 源碼下載打包

  • 首先到官方的gihub上下載cas,注意最新的master分支使用的需要java11,該分支使用Gradle工程 下載地址
  • 解壓後使用maven命令打包:mvn package
  • 把target下生成的war包重命名爲cas.war並解壓

2.配置文件修改

  • 由於CAS默認使用的是基於https協議,需要改爲兼容使用http協議,到tomcat\webapps\cas\WEB-INF\classes目錄的application,properties添加如下的內容
	cas.tgc.secure=false
	cas.serviceRegistry.initFromJson=true
  • 到\cas\WEB-INF\classes\services目錄下的HTTPSandIMAPS-10000001.json,修改內容"serviceId" : "^(https|http|imaps)://.*",即添加http,兼容http修改完畢。
  • 由於https協議默認使用的端口爲8443,我們修改爲tomcat的8080端口
    到tomcat\webapps\cas\WEB-INF\classes目錄的application,properties添加如下的內容server.port=8080
  • 由於使用的靜態密碼爲casuser::Mellon不好記憶, 到tomcat\webapps\cas\WEB-INF\classes目錄的application,properties的最後面修改密碼爲如下cas.authn.accept.users=admin::admin
  • CAS服務器搭建完畢,重啓tomcat

搭建springboot項目的客戶端

  1. 在新建的springboot項目的pom.xml添加如下依賴
<!-- https://mvnrepository.com/artifact/net.unicon.cas/cas-client-autoconfig-support -->
        <dependency>
            <groupId>net.unicon.cas</groupId>
            <artifactId>cas-client-autoconfig-support</artifactId>
            <version>1.7.0-GA</version>
        </dependency>
  1. 在application.yml添加如下配置,配置內容意思很簡單,配置內容的原理上面也說到,當訪問分佈式系統的資源時,會檢驗有沒有ticket,沒有ticket的話會跳轉到登錄界面,登錄成功後要跳轉回來當前訪問的資源
cas:
  server-url-prefix: http://localhost:8080/cas
  server-login-url: http://localhost:8080/cas/login
  client-host-url: http://localhost:9100
  validation-type: cas
server:
  port: 9100
  1. 啓動類上添加CAS註解 @EnableCasClient
@EnableCasClient
@SpringBootApplication
public class CasStarterApplication {
    public static void main(String[] args) {
        SpringApplication.run(CasStarterApplication.class, args);
    }
}
  1. 接下來寫一個rest接口測試
@RestController
public class TestController {
    @GetMapping("/test")
    public String get(){
        return "test success";
    }
}
  1. 訪問localhost:9100/test,由於沒有登錄將會跳轉到登錄界面
    CAS默認登錄界面
  2. 輸入用戶密碼admin:admin 就跳轉到當前訪問的資源

後面再更新文章闡述使用數據庫代替靜態的用戶密碼,和修改登錄界面

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