前言
在工作中,隨著接觸的專案越來越多,不同的開發語言,不同的部署系統,不同的專案都要維護自己的使用者認證系統,有沒有一種好的解決方案來解決這個痛點呢?答案肯定是有的,那就是業界鼎鼎有名的sso單點登入系統,也許你很早就聽過這個詞,但是隻聞其聲,不知其意,下面我們就將一起實戰一次cas單點登入系統話不多說,我們開始吧。
環境準備
- jdk1.8
- maven3.x
- centos7.x
- tomcat8.0
HTTPS證書準備
- 生成server.keystore
alias: 別名 這裡起名tomcat
keyalg: 證書演算法,RSA
keystore:證書生成的目標路徑和檔名
keypass:金鑰保護密碼
storepass:儲存密碼
keytool -genkey -alias tomcat -keyalg RSA -keypass 123456 -storepass 123456 -keystore tomcat.keystore -validity 3600
複製程式碼
- 生成證書server.cer
keytool -export -trustcacerts -alias tomcat -file server.cer -keystore tomcat.keystore -storepass 123456
複製程式碼
- 匯入證書
看到下面的提示Certificate was added to keystore匯入成功 其中-storepass changeit中 changeit即為預設密碼和前面設定的密碼沒有關係
keytool -import -trustcacerts -alias tomcat -keystore "/home/jdk1.8.0_171/jre/lib/security/cacerts" -file "/root/software/server.cer" -storepass changeit
複製程式碼
- 刪除證書(如果需要)
keytool -delete -alias tomcat -keystore "/home/jdk1.8.0_171/jre/lib/security/cacerts" -storepass changeit
複製程式碼
Tomcat配置Https
- 編輯
vi /root/software/apache-tomcat-8.5.37/conf/server.xml
加入配置項
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS" keystoreFile="tomcat.keystore" keystorePass="123456" />
複製程式碼
- 啟動tomcat測試8443埠
./bin/startup.sh
複製程式碼
在瀏覽器中輸入https//ip:8443測試埠
下載CAS系統
地址 github.com/apereo/cas-…
這裡選擇5.3版本,因為從6.0版本開始專案改用的gradle編譯了,個人對maven比較熟悉所以選擇了5.3版本,另外沒有科學上網的話,gradle依賴的jar是沒法下載的
下載、解壓
wget https://github.com/apereo/cas-overlay-template/archive/5.3.zip
unzip 5.3.zip
複製程式碼
如果沒有安裝unzip命令 使用如下命令安裝
yum install -y unzip zip
複製程式碼
進入解壓後的檔案,編譯打包檔案,等待完成
mvn package
複製程式碼
打包完成後
啟動cas專案
將編譯好的war包放到tomcat下的webapps下啟動tomcat
cd /root/software/cas-overlay-template-5.3/target
cp cas.war /root/software/apache-tomcat-8.0.53/webapps/
cd /root/software/apache-tomcat-8.0.53
./bin/startup.sh
複製程式碼
使用預設的賬號/密碼 casuser/Mellon
登入成功
登出成功另外還可以採用http方式訪問 ip:8080/cas
原理:
當我們第一次訪問系統時,客戶端瀏覽器程式所佔用的記憶體中不存在TGC Cookie,所以CAS Server認為使用者未進行登入,因此將請求轉發到登入頁面,當登入後再次訪問登入處理時,將會直接轉發到已登入頁面.
CAS Server根據Cookie(TGC是否能匹配TGT)來判斷使用者是否已登入過,預設情況下TGC Cookie位於瀏覽器程式所佔用的記憶體中,因此當關閉瀏覽器時Cookie失效(TGC失效),此時再訪問CAS登入頁面將需要重新登入,當CAS伺服器重啟時,TGT將會失效(位於伺服器記憶體),此時也需要重新進行登入.
當使用者登入後,CAS Server會維護TGT與使用者身份資訊的關係,所有CAS Client可以從CAS Server中獲取當前登入的使用者的身份資訊.
在已登入的狀態下訪問登出地址將會提示登出成功,其經過以下步驟:
1.清除儲存在客戶端瀏覽器的TGC Cookie(設空).
2.清除儲存在伺服器的TGT.
3.銷燬所有CAS Client的Session物件.
當登出成功後,此時再訪問登入頁面時需重新登入.
總結
經過我們自己動手親自搭建,已經完成了一個基本的cas認證服務系統,瞭解了其中的認證原理,但是如何跟我們的業務系統整合在一起呢?下一篇我們將動手實戰這一系統。