手把手教你用代碼實(shí)現(xiàn)SSO單點(diǎn)登錄
1. 概述
1.1. 什么是SSO?
單點(diǎn)登錄( Single Sign-On , 簡稱 SSO )是目前比較流行的服務(wù)于企業(yè)業(yè)務(wù)整合的解決方案之一, SSO 使得在多個(gè)應(yīng)用系統(tǒng)中,用戶只需要 登錄一次 就可以訪問所有相互信任的應(yīng)用系統(tǒng)。
1.2. 什么是CAS?
隨著SSO技術(shù)的流行,相關(guān)產(chǎn)品也比較多,其中CAS就是一套解決方案,CAS(Central Authentication Service)中文翻譯為統(tǒng)一身份認(rèn)證服務(wù)或中央身份服務(wù),它由服務(wù)端和客戶端組成,實(shí)現(xiàn)SSO,并且容易進(jìn)行企業(yè)應(yīng)用的集成。
CAS是Yale大學(xué)(耶魯)發(fā)起的一個(gè)開源項(xiàng)目,旨在為web應(yīng)用系統(tǒng)提供一種可靠的單點(diǎn)登錄方法,CAS在2004年12月正式成為JA-SIG的一個(gè)項(xiàng)目。
官網(wǎng):https://www.apereo.org/projects/cas

CAS具有以下的特點(diǎn):
開源的企業(yè)級單點(diǎn)登錄解決方案 CAS Server為需要獨(dú)立部署的web應(yīng)用 CAS Client支持非常多的客戶端(這里指單點(diǎn)登錄系統(tǒng)中的各個(gè)web應(yīng)用),包括 Java、.Net 、ISAPI、Php、Perl、uPortal、Acegi、Ruby、VBScript等客戶端
有了CAS,我們的系統(tǒng)架構(gòu)就演變成下面這樣的:

從架構(gòu)上可以看出,CAS包含兩個(gè)部分:CAS Server和CAS Client.
CAS Server需要獨(dú)立部署,主要負(fù)責(zé)對用戶的認(rèn)證工作,CAS Client負(fù)責(zé)處理 對客戶端受保護(hù)資源的訪問請求,需要登錄,重定向到CAS Server。
下面,我們一步步搭建CAS實(shí)現(xiàn)SSO.
1.3. 開發(fā)環(huán)境要求
Jdk1.8+ maven3.6 idea tomcat9.0+ windows10
2. CAS Server服務(wù)器端
2.1. CAS服務(wù)器端軟件包下載
下載版本為5.3
下載服務(wù)器的overlay地址: https://github.com/apereo/cas-overlay-template/tree/5.3
壓縮包:cas-overlay-template-5.3.zip
解壓好后用命令:build.cmd package
然后用編譯的目錄查看war包:

2.2. 服務(wù)器端的基本部署和測試
將war包放到tomcat的webapp中,然后啟動tomcat
訪問地址:http://localhost:8080/cas 或者 http://localhost:8080/cas/login

默認(rèn)用戶名和密碼在\webapps\cas\WEB-INF\classes\application.properties里面 用戶名:casuser 密碼:Mellon

2.3. CAS Server服務(wù)器配置
2.3.1 去除https認(rèn)證
CAS默認(rèn)使用的是HTTPS協(xié)議,如果使用HTTPS協(xié)議需要SSL安全證書(需向特定的機(jī)構(gòu)申請和購買)。如果對安全要求不高或是在開發(fā)測試階段,可使用HTTP協(xié)議。我們這里講解通過修改配置,讓CAS使用HTTP協(xié)議。
微信搜索公眾號:Java后端編程,回復(fù):java 領(lǐng)取資料 。
修改CAS服務(wù)端配置文件:
\cas\WEB-INF\classes\application.properties里添加如下內(nèi)容:
cas.tgc.secure=false
cas.serviceRegistry.initFromJson=true
\cas\WEB-INF\classes\services目錄下的HTTPSandIMAPS-10000001.json修改內(nèi)容如下:
"serviceId" : "^(https|http|imaps)://.*"
3. CAS Client客戶端配置(自己項(xiàng)目)
Pom文件的依賴即pom.xml
<dependency>
<groupId>net.unicon.cas</groupId>
<artifactId>cas-client-autoconfig-support</artifactId>
<version>2.1.0-GA</version>
</dependency>
application.yml配置文件
微信搜索公眾號:架構(gòu)師指南,回復(fù):架構(gòu)師 領(lǐng)取資料 。
客戶端1
server:
port: 9010
cas:
server-url-prefix: http://localhost:8080/cas
server-login-url: http://localhost:8080/cas/login
client-host-url: http://localhost:9010
validation-type: cas3
注:啟動類追加開啟CAS的注解@EnableCasClient
項(xiàng)目中新建一個(gè)測試類
iimport io.swagger.annotations.Api;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@Api(description = "SSO-CAS的測試")
public class TestController {
@GetMapping("/test1")
public String test1(){
return "test1....";
}
}
客戶端2
server:
port: 9011
cas:
server-url-prefix: http://localhost:8080/cas
server-login-url: http://localhost:8080/cas/login
client-host-url: http://localhost:9011
validation-type: cas3
注:啟動類追加開啟CAS的注解@EnableCasClient
項(xiàng)目中新建一個(gè)測試類
import io.swagger.annotations.Api;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@Api(description = "SSO-CAS的測試")
public class TestController {
@GetMapping("/test2")
public String test1(){
return "test2....";
}
}
客戶端1,客戶端2和cas服務(wù)器搭建好之后,接下來我們進(jìn)行測試:
1.首先啟動tomcat服務(wù)器中的CAS Server。
2.分別啟動客戶端1和客戶端2,然后在瀏覽器地址欄輸入客戶端1的地址http://localhost:9010/test1

在不登錄的狀態(tài),在瀏覽器的地址欄繼續(xù)輸入客戶端2的地址:http://localhost:9011/test2

當(dāng)我們在其中一個(gè)登錄界面登錄賬號后(假設(shè)登錄客戶端2)就會跳轉(zhuǎn)到登陸后的界面,如下圖:

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

以上就是單點(diǎn)登錄的測試。
歡迎添加小編微信,進(jìn)入交流群
推薦閱讀:

