1. 程式人生 > >CAS5.2x單點登入(一)——搭建cas伺服器

CAS5.2x單點登入(一)——搭建cas伺服器

單點登入的介紹

單點登入(Single Sign On ,簡稱SSO)是目前比較流行的服務於企業業務整合的解決方案之一,SSO 使得在多個應用系統中,使用者只需要登入一次就可以訪問所有相互信任的應用系統。
CAS(Central Authentication Service)是 Yale大學發起的一個企業級的、開源的專案,旨在為 Web 應用系統提供一種可靠的單點登入解決方法。
在5.0版本之前,cas使用的是ssh的那套框架來搞的,網上關於使用xml來配置的資料也是很多。前端也是使用jsp來弄的。所有的東西(連線資料庫,自定義加密等等)一系列的東西都是通過寫程式碼,然後在deployerConfigContext.xml裡面進行bean的注入,這些我就不講了,我主要講的就圍繞著5.0版本之後來講吧,5.0版本之後的最大改變就是引入了現在比較流行的微服務架構也就是spring boot這套,他將之前使用bean注入的換成了spring boot的配置來弄了,以及增加了容器(docker)。網上對於5.0後的內容也是少之又少,因為最近公司讓我做這塊,然後研究了一陣子,將自己遇到的坑以及怎麼一步步的完成設計的過程分享給大家。

工具

jdk1.8
tomcat 9(注意要使用tomcat8版本以上的)
cas-overlay-template-5.2.1

為什麼要使用cas-overlay呢?剛開始我也是不知道找哪個,下載了主版本,但是發現他是用gradle編譯的,習慣maven編譯的我想想是有多痛苦,但是沒辦法就裝了個ide,本以為裝了後就能編譯,後來發現要編譯這麼多模組,但是好多模組是我們不需要的,還有我們下載下來的每個模組都是有原始碼的。難道我們要改原始碼來完成cas的設計嗎。還好看了cas的官方說明文件,這裡可以自己去github上面看。發現官方提供了一個無侵入式的一套來設計cas,所謂的無侵入式就是你直接打成war包,放到tomcat裡面執行,你能執行,你也可以自己建立相應的檔案,cas這套他能將你的覆蓋掉他原有的(名字路徑相同)。通過這樣來達到改變程式碼以及其他東西來完成cas伺服器的搭建。好了,廢話不多說。先來搭建一波簡單的cas伺服器,也就是github下載下來的直接放到tomcat來執行的。
首先還是從生成證書開始把,因為cas是需要域名的,而我們可以通過jdk中的keytool生成證書。

  1. 使用第一個命令:keytool -genkey -alias cas -keyalg RSA -validity 999 -keystore c:/etc/cas/thekeystore會出現如圖介面這裡寫圖片描述,這時候會在c盤生成thekeystore檔案。
  2. 繼續下一個命令:keytool -export -file /etc/cas/config/cas.crt -keystore c:/etc/cas/thekeystore -alias cas,這時候會生出一個交cas.crt的證書。
    3.最後將證書匯入到jre中: keytool -import -file /etc/cas/config/cas.crt -alias cas -keystore %JAVA_HOME%/jre/lib/security/cacerts -storepass changeit,記住要加上jdk的預設密碼,也就是
    -storepass changeit,這時候會出現下圖所示,這裡寫圖片描述這個過程千萬要注意你的路徑是否存在空格,這個將導致問題的出現。到這裡就完成了證書的生成了,現在就可以繼續下一步了。
    4.記住證書生成後記得要修改host檔案,因為我們是自己生成的證書。修改host檔案其實就是將本地的ip對應到你剛才輸入的域名,也就是test.test.com

下載cas-overlay

進入這個連結去選擇自己想下載的版本,我這邊以5.2,也就是master
下載好以後,開啟看以後應該是這樣的目錄結構這裡寫圖片描述,我們可以直接在裡面開啟命令列(cmd)執行mvn clean package來進行編譯,因為我們這個編譯出來的是war包,等pom的jar包下載完後以及編譯成功後就會多出一個target資料夾,裡面有cas的內容,我們只需要將cas.war(或者直接將cas的資料夾放到tomcat的webapp並啟動tomcat)這時候我們訪問test.test.com:8080/cas/login就能看到如下的頁面這裡寫圖片描述,這時候基本的就完成了,這時候就有人問那前面生成的證書也沒什麼用啊,沒錯,我們現在的確是沒有用到證書,所以這上面不是有兩個提醒嗎,第一個就是因為我們使用的是http而不是https,所以我們要去配置tomcat。找到tomcat裡面的conf中的server.xml將

 <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />改成下面的

               <Connector
           protocol="org.apache.coyote.http11.Http11NioProtocol"
           port="8080" maxThreads="200"
           scheme="https" secure="true" SSLEnabled="true"
           keystoreFile="c:\etc\cas\thekeystore" keystorePass="123456"
           clientAuth="false" sslProtocol="TLS"/>

,這時候重新啟動tomcat,然後繼續按剛才的去訪問,發現找不到,因為我們之前使用的是http,現在換成https了,你只要加入https就可以出現這個畫面:這裡寫圖片描述
,這時候我們明顯發現那個no-security的提醒已經沒有了,cas要求是以域名來訪問的(之後整合客戶端的時候會講到)。
剩下的我們就是登入進去,預設的使用者名稱和密碼是casuser:Mellon,登入進去就是這個頁面這裡寫圖片描述
好了,今天的就到這兒把,下次繼續將如何使用動態的資料庫以及自定義登入驗證還有restful請求都寫一下