天天看點

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

    會出現如圖界面
    CAS5.2x單點登入(一)——搭建cas伺服器
    ,這時候會在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,這時候會出現下圖所示,
    CAS5.2x單點登入(一)——搭建cas伺服器

    這個過程千萬要注意你的路徑是否存在空格,這個将導緻問題的出現。到這裡就完成了證書的生成了,現在就可以繼續下一步了。

    4.記住證書生成後記得要修改host檔案,因為我們是自己生成的證書。修改host檔案其實就是将本地的ip對應到你剛才輸入的域名,也就是test.test.com

下載下傳cas-overlay

進入這個連結去選擇自己想下載下傳的版本,我這邊以5.2,也就是master

下載下傳好以後,打開看以後應該是這樣的目錄結構

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

,我們可以直接在裡面打開指令行(cmd)運作mvn clean package來進行編譯,因為我們這個編譯出來的是war包,等pom的jar包下載下傳完後以及編譯成功後就會多出一個target檔案夾,裡面有cas的内容,我們隻需要将cas.war(或者直接将cas的檔案夾放到tomcat的webapp并啟動tomcat)這時候我們通路test.test.com:8080/cas/login就能看到如下的頁面

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

,這時候基本的就完成了,這時候就有人問那前面生成的證書也沒什麼用啊,沒錯,我們現在的确是沒有用到證書,是以這上面不是有兩個提醒嗎,第一個就是因為我們使用的是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就可以出現這個畫面:

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

,這時候我們明顯發現那個no-security的提醒已經沒有了,cas要求是以域名來通路的(之後整合用戶端的時候會講到)。

剩下的我們就是登入進去,預設的使用者名和密碼是casuser:Mellon,登入進去就是這個頁面

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

好了,今天的就到這兒把,下次繼續将如何使用動态的資料庫以及自定義登入驗證還有restful請求都寫一下