單點登錄概念
單點登錄(Single Sign On),簡稱爲 SSO,是目前比較流行的企業業務整合的解決方案之一。SSO的定義是在多個應用系統中,用戶只需要登錄一次就可以訪問所有相互信任的應用系統。
當我們使用SpringCloud搭建分佈式系統後,這些子系統是分別部署在不同的服務器中,那麼使用傳統方式的session是無法解決的,我們需要使用相關的單點登錄技術來解決
SSO單點登錄主要流程步驟
- 訪問服務:SSO客戶端發送請求訪問應用系統提供的服務資源。
- 定向認證:SSO客戶端會重定向用戶請求到SSO服務器。
- 用戶認證:用戶身份認證。
- 發放票據:SSO服務器會產生一個隨機的Service Ticket。
- 驗證票據:SSO服務器驗證票據Service Ticket的合法性,驗證通過後,允許客戶端訪問服務。
- 傳輸用戶信息: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項目的客戶端
- 在新建的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>
- 在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
- 啓動類上添加CAS註解
@EnableCasClient
@EnableCasClient
@SpringBootApplication
public class CasStarterApplication {
public static void main(String[] args) {
SpringApplication.run(CasStarterApplication.class, args);
}
}
- 接下來寫一個rest接口測試
@RestController
public class TestController {
@GetMapping("/test")
public String get(){
return "test success";
}
}
- 訪問localhost:9100/test,由於沒有登錄將會跳轉到登錄界面
- 輸入用戶密碼admin:admin 就跳轉到當前訪問的資源
後面再更新文章闡述使用數據庫代替靜態的用戶密碼,和修改登錄界面