1. 程式人生 > >微服務開發之單點登入

微服務開發之單點登入

關於CAS

CAS是一種單點登入開源框架,遵循apache2.0協議,程式碼託管在github.com/apereo/cas上。
而單點登入(SSO, Single Sign On)可簡單理解為當用戶在一個應用上登入了,其他被授權信任的關聯應用不用再登入。
比如在同一個瀏覽器中登入了天貓,再開啟淘寶網站時會自動登入,無需單獨輸使用者名稱密碼或掃二維碼。以下簡單說明下CAS的部署與測試結果。

本地測試環境

jdk8
tomcat8.5
gradle-4.3.1
cas4.2.7

下載及編譯cas

$wget "https://github.com/apereo/cas/archive/v4.2.7.tar.gz"
$tar -zxf v4.2.7.tar.gz $cd cas-4.2.7/cas-server-webapp $gradle build

編譯完成後可在當前路徑的build/libs/找到編譯打包出來的war檔案cas-server-webapp-4.2.7.war;將其重新命名為cas.war後,複製到tomcat的web工作目錄webapps/下。

tomcat ssl證書配置

具體流程可參考網上資料,這裡暫不展開討論。配置好ssl證書後,在tomcat目錄下的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="/Users/apple/Documents/cas/castestkey" keystorePass="xxxx"/>

修改hosts

假設測試環境為本機,我們除了啟動一個cas server,還將啟動啟動兩個application server用於單點登入測試。以下為這三個節點的本地host配置:

127.0.0.1 sso.cas.com
127.0.0.1 app1.cas.com
127.0.0.1 app2.cas.com

訪問cas服務

tomcat起來後,我們可以這樣訪問cas服務:https://sso.cas.com:8443/cas/login
登入介面如下所示:
這裡寫圖片描述

編譯並執行測試服務

我的測試程式碼基於這原始碼專案進行了部分修改:https://github.com/willwu1984/springboot-cas-shiro
對專案通過mvn package命令完成打包後, 在》/target下找到可執行檔案cas-0.0.1-SNAPSHOT.jar
啟動測試服務:

$java -jar target/cas-0.0.1-SNAPSHOT.jar
// ...
2018-07-13 15:32:04.542  INFO 72755 --- [           main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 18091 (http)
2018-07-13 15:32:04.547  INFO 72755 --- [           main] cas.Application                          : Started Application in 5.087 seconds (JVM running for 5.65)

這時我們瀏覽器訪問 http://app1.cas.com:18091/ , 會發現頁面首先被重定向到cas登入認證頁面:

https://sso.cas.com:8443/cas/login?service=http://app1.cas.com:18091/shiro-cas

因為當前並沒真正接入資料庫,可輸入預設使用者名稱:密碼(casuser:Mellon)進行測試, 這時會跳轉回到測試服務的主頁:
這裡寫圖片描述

這時我們執行另外一個測試應用服務,假設地址為 http://app2.cas.com:18092/
在同一個瀏覽器中訪問該地址時,會發現已經自動完成登入並進入主介面。