摘要:一簡介單點登錄,簡稱為,是目前比較流行的企業業務整合的解決方案之一。客戶端攔截未認證的用戶請求,并重定向至服務端,由服務端對用戶身份進行統一認證。三搭建客戶端在官方文檔中提供了客戶端樣例,即。
一、簡介
單點登錄(Single Sign On),簡稱為 SSO,是目前比較流行的企業業務整合的解決方案之一。SSO的定義是在多個應用系統中,用戶只需要登錄一次就可以訪問所有相互信任的應用系統。
CAS 是一個開源的企業級單點登錄系統,目前最新版本為 5.2.x。
CAS 包含兩個部分:CAS Server 和 CAS Client,它們之間獨立部署。CAS 客戶端攔截未認證的用戶請求,并重定向至 CAS 服務端,由 CAS 服務端對用戶身份進行統一認證。
對于本地搭建 CAS 服務端,官方提供了基于 Maven 和 Gradle 的 Overlay 構建方式,本文用的是 CAS Maven WAR Overlay。
2.1 什么是 WAR Overlay?Overlay 技術可以把多個項目 war 合并成為一個項目,如果項目存在同名文件,那么主項目中的文件將覆蓋掉其他項目的同名文件。
使用 Overlay 無需對 CAS 源碼進行編譯,也避免了對 CAS 源碼進行侵入性改造。
2.2 環境清單JDK 1.8
Tomcat 8.0+
IntelliJ IDEA 2017.2
2.3 Overlay 構建下載 CAS Maven WAR Overlay,修改 pom.xml ,設置 CAS 版本為 5.2.2。建議去除掉 pom.xml 文件中的 wrapper-maven-plugin 和無用的 profile 配置。
5.2.2
首次導入 IDEA,可以看到后臺正在下載官方 cas.war。
工程 overlays 目錄下的文件是由 maven 編譯后才產生的,可以在 pom.xml 中配置官方 cas.war 中的文件的那些文件可以排除,不要在 overlays 中生成:
org.apache.maven.plugins maven-war-plugin 2.6 cas false false false ${manifestFileToUse} org.apereo.cas cas-server-webapp${app.server} WEB-INF/classes/services/* WEB-INF/classes/application.*
打開 Project Structure,可以觀察到該工程具有兩個 Web Root,但是 src/main/webapp 目錄并不存在,需要進行手動創建。
拷貝 overlays 目錄下的 application.properties 配置文件至 resources 目錄,用于覆蓋 CAS WAR 中的同名文件。最終工程目錄結構如下:
為工程配置 tomcat 8.0 并啟動,注意 CAS 5.2.x 不支持低于 tomcat 8.0 的版本。
看到控制臺打印 READY 表明啟動成功。
訪問 http://localhost:8080/cas/login 進入登錄界面。
其中Non-secure Connection提示需要配置 SSL,Static Authentication提示需要對用戶配置進行修改,可以修改為 JDBC、REST 等方式。目前用戶配置寫死在 application.properties 配置文件中,用戶名為 casuser,密碼為 Mellon。
## # CAS Authentication Credentials # cas.authn.accept.users=casuser::Mellon2.4 Services配置
客戶端接入 CAS 首先需要在服務端進行注冊,否則客戶端訪問將提示“未認證授權的服務”警告:
在 resources 文件夾下創建 services 文件夾進行服務定義,該目錄中可包含多個 JSON 文件,其命名必須滿足以下規則:
JSON fileName = serviceName + "-" + serviceNumericId + ".json"
創建 services/Localhost-10000003.json 文件,表示允許所有以 http://localhost 開頭的認證請求:
{ "@class": "org.apereo.cas.services.RegexRegisteredService", "serviceId": "^(http)://localhost.*", "name": "本地服務", "id": 10000003, "description": "這是一個本地允許的服務,通過localhost訪問都允許通過", "evaluationOrder": 1 }
對其中屬性的說明如下,更多詳細內容見官方文檔-Service-Management。
@class:必須為org.apereo.cas.services.RegisteredService的實現類
serviceId:對服務進行描述的表達式,可用于匹配一個或多個 URL 地址
name: 服務名稱
id:全局唯一標志
evaluationOrder:定義多個服務的執行順序
最后,根據官方文檔-service-registry,還需修改 application.properties 文件告知 CAS 服務端從本地加載服務定義文件:
#開啟識別json文件,默認false cas.serviceRegistry.initFromJson=true #自動掃描服務配置,默認開啟 #cas.serviceRegistry.watcherEnabled=true #120秒掃描一遍 #cas.serviceRegistry.repeatInterval=120000 #延遲15秒開啟 #cas.serviceRegistry.startDelay=15000 #資源加載路徑 #cas.serviceRegistry.config.location=classpath:/services
啟動時打印以下日志,說明服務注冊成功。
2018-03-18 23:36:08,660 INFO [org.apereo.cas.services.AbstractServicesManager] -三、搭建客戶端2018-03-18 23:36:08,876 INFO [org.apereo.cas.config.CasServiceRegistryInitializationConfiguration] - 2018-03-18 23:36:08,877 WARN [org.apereo.cas.services.ServiceRegistryInitializer] - 2018-03-18 23:36:09,283 INFO [org.apereo.cas.services.AbstractServicesManager] -
在官方文檔中提供了 CAS Java 客戶端樣例,即 cas-sample-java-webapp。
修改 pom.xml,修改 tomcat7-maven-plugin 設置訪問地址為http://localhost:8181/node1:
org.apache.tomcat.maven tomcat7-maven-plugin 2.2 8181 UTF-8 tomcat7 /node1
CAS Client 通過攔截器將未認證的請求重定向到 CAS Server,這里對 cas-sample-java-webapp 的 web.xml 文件進行修改,將服務端、客戶端地址替換為實際測試的地址:
CAS Single Sign Out Filter org.jasig.cas.client.session.SingleSignOutFilter casServerUrlPrefix http://localhost:8080/cas org.jasig.cas.client.session.SingleSignOutHttpSessionListener CAS Authentication Filter org.jasig.cas.client.authentication.AuthenticationFilter casServerLoginUrl http://localhost:8080/cas/login serverName http://localhost:8181/node1 CAS Validation Filter org.jasig.cas.client.validation.Cas30ProxyReceivingTicketValidationFilter casServerUrlPrefix http://localhost:8080/cas serverName http://localhost:8181/node1 redirectAfterValidation true useSession true authn_method mfa-duo CAS HttpServletRequest Wrapper Filter org.jasig.cas.client.util.HttpServletRequestWrapperFilter CAS Single Sign Out Filter /* CAS Validation Filter /* CAS Authentication Filter /* CAS HttpServletRequest Wrapper Filter /* index.jsp
此時訪問
http://localhost:8181/node1
會跳轉至
http://localhost:8080/cas/login?service=http%3A%2F%2Flocalhost%3A8181%2Fnode1%2F
輸入用戶信息,登錄成功,返回
http://localhost:8181/node1/;jsessionid=6628138DCAAA5BA3481CD4C9238FEBFF
利用相同的方法配置第二個客戶端,訪問地址為http://localhost:8282/node2,可知在 node1 登錄成功的情況下,無需再次輸入用戶密碼即可訪問 node2 后臺頁面。
至此,開發環境搭建完畢。由于客戶端只是對 web.xml 中的過濾器進行配置,可以很方便地集成到各個業務系統中。
轉載請注明出處。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/68870.html
摘要:上一篇文章簡單介紹了在本地開發環境中搭建服務端和客戶端,對單點登錄過程有了一個直觀的認識之后,本篇將探討單點登錄的實現原理。因此引入服務端作為用戶信息鑒別和傳遞中介,達到單點登錄的效果。為該流程的實現類。表示對返回結果的處理。 上一篇文章簡單介紹了 CAS 5.2.2 在本地開發環境中搭建服務端和客戶端,對單點登錄過程有了一個直觀的認識之后,本篇將探討 CAS 單點登錄的實現原理。 一...
JAVA單點登錄有好多種方式,譬如用cookie的domain做,用中間代理做等等,但都需要自行做許多開發工作。而其中耶魯大學的開源項目CAS提供了一個一站式解決方案,只需很少的擴展即可輕松實現企業級單點登錄。基礎知識網上其他挺多的,這里我就不詳述了。本文通過分析http請求過程中httpheader,cookie等數據剖析了cas(非代理模式,默認驗證邏輯。其他如restletAPI等可擴展邏輯...
摘要:針對這種情況,友戶通特定開發了聯邦用戶中心來支持企業的自有用戶中心。友戶通支持通過協議使用企業內部的支持協議的用戶中心賬號進行登錄。友戶通目前支持標準協議以及友戶通自定義協議可供企業集成。 友戶通做用友云的用戶系統也一年多了,經常聽實施、售前等說要私有化部署友戶通,原因無非是企業的考慮到用戶安全性和單一用戶賬號的需求。但由于用戶管理的復雜性,友戶通部署與維護并不容易,因此經常糾結在用戶...
摘要:如果一旦加密算法泄露了,攻擊者可以在本地建立一個實現了登錄接口的假冒父應用,通過綁定來把子應用發起的請求指向本地的假冒父應用,并作出回應。 1.什么是單點登錄? 單點登錄(Single Sign On),簡稱為 SSO,是目前比較流行的企業業務整合的解決方案之一。SSO的定義是在多個應用系統中,用戶只需要登錄一次就可以訪問所有相互信任的應用系統。客戶端持有ID,服務端持有session...
閱讀 1371·2023-04-25 16:45
閱讀 1917·2021-11-17 09:33
閱讀 2306·2021-09-27 14:04
閱讀 915·2019-08-30 15:44
閱讀 2633·2019-08-30 14:24
閱讀 3411·2019-08-30 13:59
閱讀 1691·2019-08-29 17:00
閱讀 887·2019-08-29 15:33