cas-server 6.2.2 war-overlay 部署

CAS 6.2.x 單點(diǎn)登錄

環(huán)境

  • 系統(tǒng):Windows 10 企業(yè)版 LTSC 1809
  • 開(kāi)發(fā)軟件:Intellij IDEA 2020.1 (UltiMate Edition)
    • Intellij IDEA 還需要安裝 Lombok 插件
  • Java:11.0.7 2020-04-14 TLS
  • Tomcat:apache-tomcat-9.0.38
  • Gradle: gradle-6.6.1
  • CAS Server: 6.2.x
  • CAS Client: 3.4.1

集成方式

使用官方推薦的 Overlay 方式湘捎,Overlay 方式只需下載 cas.war 包,然后只添加自己所需要的模塊和配置,修改源碼時(shí)忍坷,也只需要配置源碼相同路徑的代碼卷拘,即可覆蓋源碼缘薛。這種方式減少了打包復(fù)雜度和打包效率沃测,自定義代碼在長(zhǎng)期的迭代過(guò)程中出現(xiàn)未知溶褪,或者混亂的代碼塊,在升級(jí) CAS 版本時(shí)也能夠減少很大的工作量沙咏。

項(xiàng)目地址

項(xiàng)目的 hosts 配置

127.0.0.1 cas.example.org
127.0.0.1 client1.example.org
127.0.0.1 client2.example.org

Step1 拉取項(xiàng)目

git clone https://github.com/cas-projects/cas-sample-java-webapp 
git clone https://github.com/cas-projects/cas-sample-java-webapp cas-sample-java-webapp2
git clone -b 6.2 https://github.com/apereo/cas-overlay-template cas-server

Step2 導(dǎo)入項(xiàng)目到 IDEA 中

CAS Server 項(xiàng)目

這里 CAS Server 項(xiàng)目是 Gradle


s4meHoVaNh_20201003150655.png
image_20201003150903.png

導(dǎo)入后辨图,等待構(gòu)建完成后,右下角可以看到提示要啟用 Lombok肢藐,點(diǎn)擊啟用即可

CAS Client 項(xiàng)目

這里 Client 項(xiàng)目是 Mavn 項(xiàng)目


image_20201003151416.png

Client 2 同上的方式導(dǎo)入到 IDEA 中
最終如下圖三個(gè)項(xiàng)目

image_20201003151620.png

Step3 配置 Tomcat 容器

CAS Server 項(xiàng)目

image_20201003151942.png
image_20201003152144.png
image_20201003152342.png

如下圖配置,為 Tomcat 添加 War 包,并修改項(xiàng)目 URL 前綴,


image_20201003152556.png

Client 項(xiàng)目

Client1

配置 Tomcat 同 CAS Server 一樣徒役,配置URL分別為 Client1 和 Client2

image_20201003153007.png

Client2

image_20201003153136.png

Step4 修改配置

CAS Server 配置修改

application.yml

cas:  
  server:  
    name: http://cas.example.org:8080  
    prefix: ${cas.server.name}/cas  
  authn:  
    accept:  
      # 登錄賬號(hào),默認(rèn)為 casuser::Mellon  
      users: admin::admin  
  service-registry:  
    # 是否重新讀取 json  
    init-from-json: true  
    json:  
      # 服務(wù)注冊(cè)時(shí)讀取的 json 文件位置  
      location: file:E:\\26-cas\\cas-overlay-template\\etc\\cas\\services  
  tgc:  
    # Cookies 保存時(shí)窖壕,http 需要設(shè)置該值為false忧勿,否則無(wú)法保存Cookies成功  
    secure: false

項(xiàng)目結(jié)構(gòu)如圖下,1和2位置需要對(duì)應(yīng)


image_20201003154412.png

添加 json 服務(wù)注冊(cè)的支持的依賴
在 build.gradle 中瞻讽,配置如圖下


image_20201003155227.png

HTTPSandIMAPS-10000001.json

{  
  "@class": "org.apereo.cas.services.RegexRegisteredService",  
  "serviceId": "^(http|https|imaps)://.*",  
  "name": "HTTPS and IMAPS",  
  "id": 10000001,  
  "description": "This service definition authorizes all application urls that support HTTPS and IMAPS protocols.",  
  "evaluationOrder": 10000  
}

HTTPSandIMAPS-10000001.json 文件來(lái)自鸳吸,如下圖,使用 explodeWar 命令從 cas.war包中解壓出速勇,然后從build/cas-resources/servers/ 中復(fù)制出來(lái)晌砾,還可以使用 getResource 命令直接復(fù)制指定文件出來(lái),這里提個(gè)醒烦磁,getResource 命令在 Windows 下還需手動(dòng)修改下 gradle 腳本中拷貝文件時(shí)使用的路徑分隔符养匈。


image_20201003154639.png

拷貝出來(lái)后,ServicesId 像中添加 http 的支持

"serviceId": "^(http|https|imaps)://.*",

Client 配置

只需修改 webapp/WEB-INF/web.xml 中如下圖5個(gè)位置的配置
client2,在下圖中3,5中配置的url修改對(duì)應(yīng)的地址即可,就不贅述了


image_20201003155809.png

如下圖位置注釋:
否則CAS server 端會(huì)有: <No multifactor authentication providers are available in the application context to satisfy [[mfa-duo]]>


image_20201009155459.png

Step5 編譯打包運(yùn)行

CAS Server

因?yàn)槭?Overlay 的方式都伪,修改配置文件還需要將配置文件打包進(jìn) War 包內(nèi)呕乎,所以需要執(zhí)行下面命令

gradlew.bat clean copyCasConfiguration build

gradlew 可以如下圖方式,先直接用瀏覽器下載到本地陨晶,然后修改配置讀取本地 gradle


image_20201003161240.png

編譯打包后猬仁,運(yùn)行如下


image_20201003161358.png

Client2 同理

Step6 抓包驗(yàn)證單點(diǎn)登錄的過(guò)程

  1. 瀏覽器輸入 http://client1.example.org:9081/client1 并回車進(jìn)入
    如下圖,請(qǐng)求 client1 后會(huì)返回 302 先誉,并跳轉(zhuǎn)到 cas server 的登錄界面

    image_20201003162159.png

  2. 輸入賬號(hào)密碼登錄

    1. 請(qǐng)求 login 登錄接口驗(yàn)證成功后返回302重定向到 client 攜帶這 ticket=ST-xxx 并且設(shè)置了 cookie (Set-Cookie)
    2. client1 后端接到帶有 ticket=ST-xxx 的請(qǐng)求湿刽,然后回去請(qǐng)求 cas.example.org 驗(yàn)證 這個(gè) ST-xxx ,驗(yàn)證成功回返回 302 重定向回用戶真正想訪問(wèn)的資源褐耳,如下圖的標(biāo)號(hào)5為驗(yàn)證ST的請(qǐng)求诈闺,6 為驗(yàn)證成功后重定向的地址并且,設(shè)置了 client1 的 Cookie


      image_20201003162503.png

登錄成功后最終 Chrome 瀏覽器內(nèi)的Cookie 如下


image_20201003163423.png
image_20201003163134.png
image_20201003163153.png
  1. 輸入 client2 地址
    瀏覽器輸入: http://client2.example.org:9082/client2/ 并回車铃芦,可以看到直接登錄了
  1. client2 先重定向到 cas.example.org 并帶上 Service
  2. 由于上面 Client1 登錄了雅镊,并設(shè)置 cas.example.org 的 Cookie 這是請(qǐng)求登陸時(shí)就帶上了這個(gè) Cookie 如圖中標(biāo)號(hào)3
  3. cas.example.org 驗(yàn)證這個(gè) Cookie 成功后把曼,表示是登錄狀態(tài),又返回 302 并帶上服務(wù)的 ticket=ST-xxx 重定向 client2 如圖標(biāo)號(hào)4
  4. 如圖標(biāo)號(hào)5 client2 接收并到CAS 中驗(yàn)證該 ticket=ST-xxx 漓穿,驗(yàn)證成功后再 返回 302 嗤军,將調(diào)轉(zhuǎn)到最終的用戶想訪問(wèn)的資源頁(yè)面,如圖標(biāo)號(hào)6


    image_20201003163856.png

問(wèn)題

在上面驗(yàn)證中晃危,可能會(huì)碰到 Cookie 無(wú)法保存的問(wèn)題叙赚,導(dǎo)致進(jìn)入 client2 時(shí)還是要登錄,后面發(fā)現(xiàn)問(wèn)題是 Chrome 80+版本中 secure 設(shè)置 false 則SameSite不能設(shè)置為 None僚饭。

如下圖震叮,F(xiàn)12 控制臺(tái)查看請(qǐng)求,查為什么 Cookie 沒(méi)有保存


image_20201003165749.png

解決方式

  1. 配置 same-site-policy=none|lax|strict Cookie 屬性


    image_20201003214132.png
  2. Chrome 忽略該問(wèn)題的方式
    如下圖禁用該屬性


    image_20201003170303.png

參考

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末鳍鸵,一起剝皮案震驚了整個(gè)濱河市苇瓣,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌偿乖,老刑警劉巖击罪,帶你破解...
    沈念sama閱讀 212,718評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異贪薪,居然都是意外死亡媳禁,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,683評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門画切,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)竣稽,“玉大人,你說(shuō)我怎么就攤上這事霍弹『帘穑” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 158,207評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵典格,是天一觀的道長(zhǎng)岛宦。 經(jīng)常有香客問(wèn)我,道長(zhǎng)钝计,這世上最難降的妖魔是什么恋博? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,755評(píng)論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮私恬,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘炼吴。我一直安慰自己本鸣,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,862評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布硅蹦。 她就那樣靜靜地躺著荣德,像睡著了一般闷煤。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上涮瞻,一...
    開(kāi)封第一講書(shū)人閱讀 50,050評(píng)論 1 291
  • 那天鲤拿,我揣著相機(jī)與錄音,去河邊找鬼署咽。 笑死近顷,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的宁否。 我是一名探鬼主播窒升,決...
    沈念sama閱讀 39,136評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼慕匠!你這毒婦竟也來(lái)了饱须?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,882評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤台谊,失蹤者是張志新(化名)和其女友劉穎蓉媳,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體锅铅,經(jīng)...
    沈念sama閱讀 44,330評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡督怜,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,651評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了狠角。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片号杠。...
    茶點(diǎn)故事閱讀 38,789評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖丰歌,靈堂內(nèi)的尸體忽然破棺而出姨蟋,到底是詐尸還是另有隱情,我是刑警寧澤立帖,帶...
    沈念sama閱讀 34,477評(píng)論 4 333
  • 正文 年R本政府宣布眼溶,位于F島的核電站,受9級(jí)特大地震影響晓勇,放射性物質(zhì)發(fā)生泄漏堂飞。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,135評(píng)論 3 317
  • 文/蒙蒙 一绑咱、第九天 我趴在偏房一處隱蔽的房頂上張望绰筛。 院中可真熱鬧,春花似錦描融、人聲如沸铝噩。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,864評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)骏庸。三九已至毛甲,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間具被,已是汗流浹背玻募。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,099評(píng)論 1 267
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留一姿,地道東北人七咧。 一個(gè)月前我還...
    沈念sama閱讀 46,598評(píng)論 2 362
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像啸蜜,于是被迫代替她去往敵國(guó)和親坑雅。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,697評(píng)論 2 351

推薦閱讀更多精彩內(nèi)容