當前位置:
首頁 > 最新 > 單點登錄介紹和服務端實現

單點登錄介紹和服務端實現

為什麼要介紹單點登錄?前幾天打開公眾號消息,發現有夥伴在搜索單點登錄關鍵字,於是想寫些相關內容的文章,來擴展下夥伴的的視野或者給出可能行的技術選型方案。這裡給大家介紹到的耶魯大學的一個開源的企業級單點登錄系統,幾年前用在當時公司的一個解決方案,沒想到直到還一直有團隊在維護並且越來越完善,連流行的springBoot、SpringCloud都集成進去了,當然,這只是一個架子,你需要熟讀它的文檔和代碼,才能改造成項目所需要的,所以,也有了這個帖子。

單點登錄是企業業務整合比較流行解決方案,像多個系統使用同一個用戶資料庫的,並且這些系統需要相互信任時,此時使用單點登陸(SSO)是比較合適的。


cas簡介

CAS 是Yale(耶魯)大學的一個開源的企業級單點登錄系統,它的特點:

Java (Spring Webflow/Spring Boot) 服務組件

可插拔身份驗證支持(LDAP,Database,X.509,MFA)

支持多種協議(CAS,SAML,OAuth,OpenID,OIDC)

跨平台客戶端支持(Java,.Net,PHP,Perl,Apache等)

與uPortal,Liferay,BlueSocket,Moodle,Google Apps等集成

cas server: https://github.com/Jasig/cas/releases

cas client: http://developer.jasig.org/cas-clients/

CAS官網地址:http://www.jasig.org/cas

cas服務端需要單獨部署,本篇主要為服務端教程,主要圍繞環境、本地構建、改造以及運行和調試,Cas項目一直有團隊在維護,新的版本都已經集成了springboot和cloud,減少儘可能的xml配置以及可配合pringCloud集成高可用

cas原理和流程

(截圖來源網路)

1.用戶通過browser請求cas client A端的資源。

2.client A端發現用戶未登錄(client沒有收到ST),redirect到cas server,並且把用戶請求服務的url發送給server;server發現用戶瀏覽器中沒有TGC(Ticket Granting Cookie),就跳轉到登錄頁面。

3.用戶在登錄頁面登錄並登錄成功。

4.server在用戶的瀏覽器中設置一個TGC(Ticket Granting Cookie),並且在server端保存一個TGT(Ticket Granting Tciket),然後把用戶重定向到,其中ST是由TGT生成的。

5.client A端通過GET的方法收到ST,向server端驗證這個ticket的有效性,這一步主要是為了防止惡意用來訪問client A,所以雖然ST是server發送給client A的,client A仍然需要向server驗證其有效性。

6.ticket有效,server端返回ticket對應的用戶的用戶名,client A端為用戶提供請求的服務。

上述是未登錄的用戶訪問client A的過程,用戶通過以上步驟已經登錄了CAS系統,此時他訪問CAS系統中信任的client B端,是不用登錄的,實現步驟如下:

1.1.用戶通過browser請求cas client B端的資源。

2.client B端發現沒有收到ST,redirect到cas server,並且把用戶請求服務的url發送給server;server發現用戶瀏覽器中有TGC(Ticket Granting Cookie),驗證該TGC後,用server端存儲的TGT生成一個ST。

3.server把用戶重定向到。

4.client B端通過GET的方法收到ST,向server端驗證這個ticket的有效性.

5.ticket有效,server端返回ticket對應的用戶的用戶名,client B端為用戶提供請求的服務,這樣用戶就不用再次登錄就可以訪問到client B了。

所以從上述過程中,可以看到client端既不能接觸到用戶的用戶名密碼,也不能接觸到用戶的憑證TGT或者TGC,它只做兩件事情:如果用戶的請求里有ST,那麼就向伺服器驗證ST的有效性;如果用戶的請求里沒有ST,那麼就把用戶重定向到cas server;

cas server全權負責管理用戶的用戶名和密碼,如果發現用戶的瀏覽器裡面有有效的TGC,就生成ST把用戶重定向到client端;如果用戶瀏覽器裡面沒有TGC或者TGC無效,就讓用戶重新登錄,然後在用戶的瀏覽器裡面設置新的TGC。而server和用戶瀏覽器之間的交互是https安全協議,這樣就保證了用戶的用戶名密碼的安全性。

環境相關

Jdk 1.8

Maven 3.3

IntelliJ IDEA

Apache-tomcat-8.5.32

下載代碼

下載的是maven版本的

下載完成以後查看目錄結構,發現並無java代碼,而是一些配置文件和腳本文件,所以我們需要對其進行構建和打包

導入項目到idea

如圖,導入完以後,開始下載war包了。網速快的話很快就下好了。然後在插件中執行install 命令 或在目錄中執行maven命令,生成war包

項目初運行

添加tomcat伺服器運行項目,如圖

然後開始運行項目就跑起來了。登錄界面長這樣,

頁面訪問是很慢的,因為在線引入了很多外部網站的css、js等文件。我們後面改造成引入本地的,將極大提升效率

登錄成功界面


改造的話按照一般基本要求打算以以下幾點進行開展,基本滿足大部分要求:

項目結構調整(便於二次開發)

登錄驗證 (資料庫登錄、密碼加密方式)

自定義頁面 (個性化定製)

遠程資源本地化 (滿足內網訪問、提升訪問速度)

票據持久化(分散式、高可用)

分散式集群

項目結構調整

默認的項目結構是這樣的

基本是為了構建打包服務和運行。下載到本地構建後查看target目錄,它的結構是這樣的

當然,這些東西都是項目的依賴產生的。所以為了方便二次開發,我們項目結構改造後成這樣

是不是跟spring boot 結構差不多呢?這個結構是根據它的target決定的,我們構建打包的時候能夠去覆蓋它原始的,當然,pom.xml需要這麼配。

在build節點加入這段

除了這點,還整理了pom.xml,去除很多不需要的配置,加入需要的配置。具體見整理後的源碼。


或者公眾號回復:單點登錄

後續會就相關點進行改造,歡迎關注。

改造相關

項目結構調整(便於二次開發)

登錄驗證 (資料庫登錄、密碼加密方式)

自定義頁面 (個性化定製)

遠程資源本地化 (滿足內網訪問、提升訪問速度)

票據持久化(分散式、高可用)

分散式集群

客戶端集成

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 JAVA葵花寶典 的精彩文章:

TAG:JAVA葵花寶典 |