CAS單點登入(SSO)實戰(一)

小橘子2222發表於2019-01-24

前言

在工作中,隨著接觸的專案越來越多,不同的開發語言,不同的部署系統,不同的專案都要維護自己的使用者認證系統,有沒有一種好的解決方案來解決這個痛點呢?答案肯定是有的,那就是業界鼎鼎有名的sso單點登入系統,也許你很早就聽過這個詞,但是隻聞其聲,不知其意,下面我們就將一起實戰一次cas單點登入系統話不多說,我們開始吧。

環境準備

  • jdk1.8
    CAS單點登入(SSO)實戰(一)
  • maven3.x
    CAS單點登入(SSO)實戰(一)
  • centos7.x
    CAS單點登入(SSO)實戰(一)
  • tomcat8.0
    CAS單點登入(SSO)實戰(一)

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
複製程式碼

CAS單點登入(SSO)實戰(一)

  • 匯入證書
    看到下面的提示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
複製程式碼

CAS單點登入(SSO)實戰(一)

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單點登入(SSO)實戰(一)

下載CAS系統

地址 github.com/apereo/cas-…
這裡選擇5.3版本,因為從6.0版本開始專案改用的gradle編譯了,個人對maven比較熟悉所以選擇了5.3版本,另外沒有科學上網的話,gradle依賴的jar是沒法下載的

CAS單點登入(SSO)實戰(一)

下載、解壓

wget https://github.com/apereo/cas-overlay-template/archive/5.3.zip
unzip 5.3.zip 
複製程式碼

如果沒有安裝unzip命令 使用如下命令安裝

yum install -y unzip zip
複製程式碼

CAS單點登入(SSO)實戰(一)

進入解壓後的檔案,編譯打包檔案,等待完成

mvn package 
複製程式碼

打包完成後

CAS單點登入(SSO)實戰(一)

啟動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  
複製程式碼

CAS單點登入(SSO)實戰(一)
使用預設的賬號/密碼 casuser/Mellon

登入成功

CAS單點登入(SSO)實戰(一)
登出成功

CAS單點登入(SSO)實戰(一)

另外還可以採用http方式訪問 ip:8080/cas

CAS單點登入(SSO)實戰(一)

原理:

當我們第一次訪問系統時,客戶端瀏覽器程式所佔用的記憶體中不存在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認證服務系統,瞭解了其中的認證原理,但是如何跟我們的業務系統整合在一起呢?下一篇我們將動手實戰這一系統。

相關文章