一、單點登錄應用場景
不少業主單位隨着自身的發展,建立不少業務支撐系統,往往會採用不同的開發商進行系統開發和建設,因此必然形成如下一種局面:工作人員需要登錄多個業務系統才能將自己的工作全部完成,給工作人員帶來了額外的負擔。
因此單點登錄變應運而生了,它解決了多個系統都要登陸的問題,只需要打開一個系統時,進行登錄(單點登錄),就可以自由切換其他的系統。
二、單點登錄的框架
目前廣泛使用的單點登錄框架是CAS框架,CAS是SSO解決方案裏面比較成熟的架構,是耶魯大學發起的一個開源架構,其旨在爲 Web 應用系統提供一種可靠的單點登錄方法,CAS 在 2004 年 12 月正式成爲 JA-SIG 的一個項目。CAS 具有以下特點:
- 開源的企業級單點登錄解決方案。
- CAS Server 爲需要獨立部署的 Web 應用。
- CAS Client 支持非常多的客戶端(這裏指單點登錄系統中的各個 Web 應用),包括 Java, .Net, PHP, Perl, Apache, uPortal, Ruby 等。
下圖是 CAS 最基本的協議過程:
CAS協議過程
- 訪問服務:SSO客戶端發送請求訪問應用系統提供的服務資源。
- 重定向認證:SSO客戶端會重定向用戶請求到SSO服務器。
- 用戶驗證:用戶身份認證。
- 生成票據:SSO服務器會產生一個隨機的Service Ticket。
- 驗證票據:SSO服務器驗證票據Service Ticket的合法性,驗證通過後,允許客戶端訪問服務。
- 傳輸用戶信息:SSO服務器驗證票據通過後,傳輸用戶認證結果信息給客戶端。
三、學習實踐的內容
- 搭建單點登錄框架
- 通過數據庫進行單點登錄的驗證
- 模擬多個客戶端進行接入
- 對接入進行管理
四、本篇的學習實踐內容
本篇主要是解決上面時候的第一個任務:搭建單點登錄框架,初步瞭解CAS。主要要完成如下內容:
- 進行域名映射
- 下載CAS工程並進行編譯
- 準備認證證書
- 修改jdk和tomcat
- 配置瀏覽器支持https
五、準備工作詳細步驟
5.1 域名映射
修改windows的hosts文件,添加cas服務端域名server.cas.com和兩個客戶端應用的域名
App1.cas.com和 app2.cas.com
在最後面添加下面三行
127.0.0.1 server.cas.com
127.0.0.1 app1.cas.com
127.0.0.1 app2.cas.com
保存後退出。
5.2 下載CAS工程並編譯
https://github.com/apereo/cas-overlay-template/tree/5.3 從這個url直接打開cas的5.3版本url, 我使用時最新的已經是6.1版本(工程組織方式從maven 變成了 gradle,打包方法發生了變化)
在下圖中的紅框處,選擇要下載的版本和進行壓縮包下載。
下載後,將壓縮文件解壓後,結構如下:
打開CMD窗口後,進入到上面的目錄,執行 mvn clean package 這個命令的意思進行打包
注意:這裏會比較慢,需要耐心等待。
執行這個步驟的目的是生產一個cas.war包, 可以放到tomcat中運行。經過長時間的等待終於編譯成功,如下圖
編譯成功後,在目錄下生成一個target目錄,在這裏會有一個war包,此war包可以放到tomcat工程裏面
5.3 準備證書
tomcat通過https訪問話,需要有證書,藉助jdk的工具keytool來進行證書的生成。
5.4 生成keystore
通過cmd窗口,進入放置證書文件的目錄,比如 e:/tmp/tomcat-key/
keytool -genkey -alias tomcat -keyalg RSA -validity 3650 -keystore e:/tmp/tomcat-key/tomcat.keystore
這裏的密鑰可以用自己設置的,本例中用 123456
生成後檢查該路徑:
5.5 根據keystore生產crt文件
#輸入第一步中keystore的密碼changeit
keytool -export -alias tomcat -file e:/tmp/tomcat-key/tomcat.cer -keystore e:/tmp/tomcat-key/tomcat.keystore -validity 3650
5.6 修改jdk和tomcat
5.6.1 信任授權文件到jdk
首先確定一下jdk的目錄,本例如下:
證書庫cacerts的缺省口令是 changeit
keytool -import -keystore C:/Java/jdk1.8.0_152/jre/lib/security/cacerts -file E:\tmp\tomcat-key/tomcat.cer -alias tomcat -storepass changeit
這樣證書已經準備好並授權到jdk1.8了
5.6.2 修改tomcat 配置
進入要部署的tomcat 目錄,本例中使用的是tomcat 8,目錄C:\Java\apache-tomcat-8.5.34,如下圖:
下面需要修改tomcat 的sever.xml文件,這個文件在tomcat下得conf目錄裏
默認是開啓8080端口,http協議,在這個配置下面添加如下配置:
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
<Connector port="8443" protocol="org.apache.coyote.http11.Http11Protocol"
maxThreads="200" SSLEnabled="true" scheme="https"
secure="true" clientAuth="false" sslProtocol="TLS"
keystoreFile="E:\tmp\tomcat-key\tomcat.keystore"
keystorePass="123456"/>
如下圖:
配置完成後保存。
5.7 配置瀏覽器支持https
在chrome中管理證書,進入配置界面->選擇高級->管理證書
點擊右邊的管理按鈕,彈出導入界面
根據導入提示一步一步進行,選擇前面製作的證書,導入。
六、檢驗準備工作
6.1 部署
將CAS工程編譯後的結果 cas.war 部署到tomcat 環境下,在tomcat的webapps目錄下新建一個cas目錄,將cas.war 拷貝到這個cas目錄
C:\Java\apache-tomcat-8.5.34\webapps\cas
6.2 運行並檢驗
將tomcat目錄下的startup.bat 運行起來(如果是linux的運行startup.sh),看到運行日誌如下:
端口8443已經就緒,啓動startup 完成。打開chrome ,訪問https://server.cas.com:8443/cas/login 如果出現提示,點擊高級/詳細信息,繼續訪問。
旁邊Static Authentication 提示你:你現在只有一個寫死的用戶默認賬號: 默認密碼:Mellon 僅有這一個用戶,目前這個服務端只能看看,沒什麼實際用途。建議您將CAS連接到LDAP、JDBC等。
登陸成功後,界面如下:
以上就是單點登錄的第一部分的學習和實踐內容。