CAS實現單點登錄

fans news 發佈 2022-01-27T04:41:17+00:00

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

前言

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

CAS下載安裝

1.CAS是Central Authentication Service的縮寫,中央認證服務,一種獨立開放指令協議。CAS 是 耶魯大學(Yale University)發起的一個開源項目,旨在為 Web 應用系統提供一種可靠的單點登錄方法,CAS 在 2004 年 12 月正式成為 JA-SIG 的一個項目。

2.github下載地址 https://repo1.maven.org/maven2/org/apereo/cas/cas-server-webapp-tomcat/5.3.14/ 下載如下圖所示5.3.14.war文件

生成秘鑰庫

1.我們採用jdk自帶的keytool工具生成秘鑰庫,別名casbm,生成的秘鑰存儲路徑為D:\cas\keystore
2.打開cmd窗口執行以下命令,命令如下:
keytool -genkey -v -alias casbm -keyalg RSA -keystore D:\cas\keystore\casbm.keystore

秘鑰口令隨便輸入,我這裡輸入123456

這裡我們要輸入一些問題的答案,我們可以隨便輸入,例如我輸入的

然後這裡問我們是否確認為這些信息,我們這裡確認輸入y

這裡按下回車,可以看到命令成功結束,這時我們看一下路徑下有沒有生成秘鑰

我們可以看到已經生成了秘鑰

從秘鑰庫中導出證書

1.我們生成秘鑰庫後需要從秘鑰庫中導出證書,打開cmd窗口,命令如下:
keytool -export -trustcacerts -alias casbm -File D:/cas/keystore/casbm.cer -keystore D:/cas/keystore/casbm.keystore

這時讓我們輸入密碼,我上面設置的為123456,這裡我就輸入123456,如下圖所示導出成功

將證書導入到JDK證書庫

1.我們從秘鑰庫導出證書後需要將證書導入到JDK證書庫中,打開cmd窗口,命令如下,其中最後的路徑為你本地jdk的路徑,要確保該路徑正確:
keytool -import -trustcacerts -alias casbm -file D:/cas/keystore/casbm.cer -keystore 「D:/Configure/java/java8/jre/lib/security/cacerts」

這個時候提示我們輸入密碼,這個密碼不是我們上面設置的密碼,而是固定的密碼: changeit

這個時候提示我們是否信任此證書,我們輸入:y

配置tomcat支持https

1.由於cas需要https協議訪問,所以我們要配置tomcat也支持https協議,我們找到我們的tomcat的server.xml文件,加入如下配置:

<Connector port=「8443」 Protocol=「org.apache.coyote.http11.Http11NioProtocol」

maxThreads=「150」 SSLEnabled=「true」 scheme=「https」 secure=「true」
clientAuth=「false」 sslProtocol=「TLS」 keystoreFile=「D:\cas\keystore\casbm.keystore」 keystorePass=「123456」/>

將下載的CAS包放入tomcat中啟動

1.我們將之前下載的cas包放入tomcat中啟動,首先將war包放入tomcat的webapps下

2.這裡我們為了方便訪問,我們將war包改名為cas

3.這裡我們啟動tomcat,找到tomcat中bin下的startup.bat文件雙擊啟動。

4.啟動完成後我們訪問登錄頁面驗證是否啟動成功,訪問地址如下,用戶名為:casuser 密碼為:Mellon:
https://localhost:8443/cas

5.用戶名密碼是在如下配置文件中指定的

配置CAS日誌地址

1.這個時候我們為了方便日後排查問題,我們需要將cas的日誌修改為我們指定的地址,找到如下配置文件

配置用戶名密碼為資料庫中的真實用戶名密碼

1.上面我們的用戶名密碼是寫死的,但是實際開發中我們的用戶名密碼是存儲在資料庫中的,這個時候需要我們從資料庫中讀取,我們打開application.properties文件,添加如下配置

cas.authn.jdbc.query[0].url=jdbc:mysql://localhost:3306/cas?serverTimezone=GMT

cas.authn.jdbc.query[0].user=root

cas.authn.jdbc.query[0].password=root

cas.authn.jdbc.query[0].sql=select * from user where username = ?

cas.authn.jdbc.query[0].fieldPassword=password

cas.authn.jdbc.query[0].driverClass=com.mysql.jdbc.Driver

將所需要的驅動jar包放入cas項目中

1.我們需要將所需要的jar包放入cas項目的lib中,jar包名稱如下,可以去maven倉庫中搜索

cas-server-support-jdbc-5.3.1.jar

cas-server-support-jdbc-drivers-5.3.1.jar

cas-server-support-jdbc-authentication-5.3.1.jar

connector-java-5.1.34_1.jar

2.此時我們重新啟動tomcat,使用資料庫中的用戶名密碼登錄

設置密碼加密

1.我們到此已經可以使用資料庫的用戶名密碼來登錄cas了,但是明文的密碼並不安全,現在我們需要配置一下加密。還是找到application.properties文件,添加如下代碼

cas.authn.jdbc.query[0].passwordEncoder.type=DEFAULT

cas.authn.jdbc.query[0].passwordEncoder.characterEncoding=UTF-8
#MD5加密策略

cas.authn.jdbc.query[0].passwordEncoder.encodingAlgorithm=MD5

2.此時已經配置好加密了,我們可以測試一下,將123456加密,然後將密碼改為加密後的,此時重啟tomcat再用123456登錄。

關鍵字: