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