成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

從http驗(yàn)證流程解析CAS單點(diǎn)登錄

honhon / 1111人閱讀

JAVA單點(diǎn)登錄有好多種方式,譬如用cookie的domain做,用中間代理做等等,但都需要自行做許多開(kāi)發(fā)工作。而其中耶魯大學(xué)的開(kāi)源項(xiàng)目CAS提供了一個(gè)一站式解決方案,只需很少的擴(kuò)展即可輕松實(shí)現(xiàn)企業(yè)級(jí)單點(diǎn)登錄。基礎(chǔ)知識(shí)網(wǎng)上其他挺多的,這里我就不詳述了。本文通過(guò)分析http請(qǐng)求過(guò)程中http
header,cookie等數(shù)據(jù)剖析了cas(非代理模式,默認(rèn)驗(yàn)證邏輯。其他如restletAPI等可擴(kuò)展邏輯本文不會(huì)覆蓋)的驗(yàn)證流程,在開(kāi)發(fā)調(diào)試中提供了另一種方便的方式掌控整個(gè)流程的關(guān)鍵點(diǎn)。

Cas術(shù)語(yǔ)

TGT: ?cas服務(wù)端生成的每個(gè)用戶唯一的ticket。

TGC: ?cas服務(wù)端根據(jù)TGT生成的每個(gè)用戶的cookie,其value是TGT。

ST: ???cas服務(wù)端根據(jù)每個(gè)應(yīng)用,每個(gè)用戶生成的一個(gè)ticket,驗(yàn)證一次就銷(xiāo)毀。

Shiro: JAVA權(quán)限管理框架

Cas請(qǐng)求交互總圖

下面將通過(guò)兩個(gè)客戶端應(yīng)用A、B分別跟cas server端交互來(lái)詳述整個(gè)交互流程。本文基于CAS 4.x。 CAS 5.X默認(rèn)邏輯一致,只不過(guò)通過(guò)spring boot進(jìn)行了重新模塊劃分。

客戶端應(yīng)用A訪問(wèn)跳轉(zhuǎn)Cas Server驗(yàn)證
http request:

GET ?http://uc.54315.com/myWhListManager



http response:

302 Found

Location:?https://passport.jzt.com/login?service=http://uc.54315.com/casuc

Cas client攔截請(qǐng)求發(fā)現(xiàn)session中無(wú)cas assertion(其實(shí)就是用戶名和ticket)并且沒(méi)有ST則跳轉(zhuǎn)CAS server(本項(xiàng)目由于用了shiro重寫(xiě)攔截邏輯所以是判斷shiro中有沒(méi)有保存驗(yàn)證后的用戶信息), server端發(fā)現(xiàn)無(wú)TGC跳轉(zhuǎn)配置的CAS登陸URL

Cas server端登陸后http請(qǐng)求過(guò)程

1. post提交用戶信息驗(yàn)證:

    http request:
    
    Post?https://passport.jzt.com/login?service=http://uc.54315.com/casuc
    
    
    
    http response:
    
    302 Found
    
    Location:http://uc.54315.com/casuc?ticket=ST-1-0kdGxVoshSZz2Bp6kMaA-

cas01.example.org

Response返回302指示重定向。同時(shí)可見(jiàn)response返回兩個(gè)cookie: CASPRIVACY=和CASTGC=TGT-1-MRebCegmlpucavmxcPqCUMVc496IiJgl06BGyJ736D7c4UPkCw-cas01.example.org

也就是說(shuō):cas server端驗(yàn)證通過(guò)后產(chǎn)生ST并在location URL后面賦給ticket。此時(shí)往客戶端瀏覽器寫(xiě)入TGC,并且指示瀏覽器重定向到location位置,其正是客戶端應(yīng)用驗(yàn)證ST的路徑。

此步驟產(chǎn)生2個(gè)ticket: TGT,ST;產(chǎn)生一個(gè)cookie:TGC,此cookie是通過(guò)用戶私密信息與TGT加密生成。

2. Cas client驗(yàn)證ST:

http request:

Get ?http://uc.54315.com/casuc?ticket=ST-1-0kdGxVoshSZz2Bp6kMaA-cas01.example.org

此時(shí)客戶端應(yīng)用由于受到shiro的保護(hù),request cookie中就不是JSESSIONID而是shiro的SessionId:sid,uuid模式,其與第一步中的sid一致。

http response:

302Found

Location:http://uc.54315.com/myWhListManager;jsessionid=qqwn1wmrsymy47n8udvf7v2s

Response返回302指示重定向到另一個(gè)頁(yè)面(第一次訪問(wèn)的頁(yè)面或者shiro配置的successful url),同時(shí)可見(jiàn)生成了新的session和sessionID。同時(shí)可見(jiàn)response返回2個(gè)cookie:? JSESSIONID,為servlet容器產(chǎn)生的session id,其為location中的jsessionid;rememberMe,為shiro為自動(dòng)登錄配置的。

此步驟驗(yàn)證ST后(通過(guò)url connection去cas server驗(yàn)證ST)如果通過(guò)則重定向到新頁(yè)面(第一次訪問(wèn)的頁(yè)面或者shiro配置的successful url)產(chǎn)生一個(gè)新的容器session id。(為何要重新創(chuàng)建session,因?yàn)槠鋾?huì)在新的session中保存登陸了客戶端應(yīng)用的憑證CAS Assertion,其為客戶端驗(yàn)證ST后返回的)到了這步驟以后屬于客戶端自身的邏輯。CAS作用到此為止。

3. 客戶端應(yīng)用頁(yè)面

客戶端應(yīng)用A再次訪問(wèn)
http request:

Get  http://uc.54315.com/getUcUserRegister

http response:

200 OK

可以看到這次直接就訪問(wèn)了,也沒(méi)有經(jīng)過(guò)驗(yàn)證ticket和與cas服務(wù)端交互。此是因?yàn)閟ession中已經(jīng)保存了cas assertion,所以算作登陸了。

客戶端應(yīng)用B訪問(wèn)

1. 訪問(wèn)B應(yīng)用首頁(yè)

http request:

Get  http://localhost:8080/

http response:

302 Found

Location:?https://passport.jzt.com/login?service=http://localhost:8080/casuc

可見(jiàn)產(chǎn)生了新的shiro session,并提示跳轉(zhuǎn)CAS服務(wù)端登陸URL。

2. 訪問(wèn)CAS服務(wù)器登陸URL

http request:

Get  https://passport.jzt.com/login?service=http://localhost:8080/casuc

http response:

302 Found

Location:?http://localhost:8080/casuc?ticket=ST-2-wtWpPg2Sv4d00fXecLSI-cas01.example.org

可見(jiàn)并沒(méi)有要求登陸而是直接就提示跳轉(zhuǎn)到location的URL做驗(yàn)證并產(chǎn)生了一個(gè)新的ST。這是因?yàn)镃AS服務(wù)端讀取了A應(yīng)用登陸后在瀏覽器生成的TGC, request cookie中帶入了(下圖可以看到),從而認(rèn)為用戶已經(jīng)登陸,所以直接生成ST,并要求重定向到客戶端應(yīng)用B去驗(yàn)證。

3. 驗(yàn)證ST

http request:

Get ?http://localhost:8080/casuc?ticket=ST-2-wtWpPg2Sv4d00fXecLSI-cas01.example.org



http response:

302 Found

Location:?http://localhost:8080/;jsessionid=1jh99lja6wzxw1jweg8ss40yt8

步驟同A應(yīng)用。

4. 訪問(wèn)B應(yīng)用首頁(yè)

如圖

客戶端應(yīng)用A退出

如下圖:

可見(jiàn)登出時(shí)發(fā)生四次請(qǐng)求。

1. 第一次請(qǐng)求:

http request:

GET ?https://passport.jzt.com/logout?service=http://uc.54315.com:80/logout



http response:

302 Found

Location:?http://uc.54315.com:80/logout

直接訪問(wèn)CAS server端的登出url。Cookie中有CASTGC和server端的JSESSIONID。

返回中CASTGC清空,CASPRIVACY清空。 此時(shí)說(shuō)明server端已經(jīng)清除了A應(yīng)用的ST和瀏覽器的CASTGC

2. 第二次請(qǐng)求:

http request:

Get ?http://uc.54315.com/logout



http response:

302 Found

Location:?http://uc.54315.com/

跳轉(zhuǎn)到了客戶端應(yīng)用,發(fā)現(xiàn)新創(chuàng)建了shiro session(sid)和servlet容器session(JSESSIONID)

并且發(fā)現(xiàn)rememberMe和SID的cookie都被換成deleteMe啦。 此為shiro的loginout攔截器干的好事。

3. 第三次請(qǐng)求:

http request:

Get?http://uc.54315.com/



http response:

302 Found

Location: https://passport.jzt.com/login?service=http://uc.54315.com/casuc

正常訪問(wèn)首頁(yè),但是因?yàn)闆](méi)登陸所以提示要重定向到CAS服務(wù)端去登陸。(如果有了首頁(yè)就改為跳轉(zhuǎn)到首頁(yè))

4. 第四次請(qǐng)求

同原來(lái)步驟。

Cas總結(jié)

總的來(lái)說(shuō),cas(非代理模式,默認(rèn)驗(yàn)證邏輯)是用一個(gè)cookie(TGC), N個(gè)session(N個(gè)子系統(tǒng)session,其中存儲(chǔ)了cas receipt)來(lái)保證各應(yīng)用的統(tǒng)一登錄。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/67359.html

相關(guān)文章

  • 號(hào)外:友戶通支持企業(yè)自有用戶中心啦

    摘要:針對(duì)這種情況,友戶通特定開(kāi)發(fā)了聯(lián)邦用戶中心來(lái)支持企業(yè)的自有用戶中心。友戶通支持通過(guò)協(xié)議使用企業(yè)內(nèi)部的支持協(xié)議的用戶中心賬號(hào)進(jìn)行登錄。友戶通目前支持標(biāo)準(zhǔn)協(xié)議以及友戶通自定義協(xié)議可供企業(yè)集成。 友戶通做用友云的用戶系統(tǒng)也一年多了,經(jīng)常聽(tīng)實(shí)施、售前等說(shuō)要私有化部署友戶通,原因無(wú)非是企業(yè)的考慮到用戶安全性和單一用戶賬號(hào)的需求。但由于用戶管理的復(fù)雜性,友戶通部署與維護(hù)并不容易,因此經(jīng)常糾結(jié)在用戶...

    妤鋒シ 評(píng)論0 收藏0
  • cas工作原理淺析與總結(jié)

    摘要:是大學(xué)發(fā)起的一個(gè)企業(yè)級(jí)的開(kāi)源的項(xiàng)目,旨在為應(yīng)用系統(tǒng)提供一種可靠的單點(diǎn)登錄解決方法屬于。實(shí)現(xiàn)原理是先通過(guò)的認(rèn)證,然后向申請(qǐng)一個(gè)針對(duì)于的,之后在訪問(wèn)時(shí)把申請(qǐng)到的針對(duì)于的以參數(shù)傳遞過(guò)去。后面的流程與上述流程步驟及以后步驟類(lèi)似 CAS( Central Authentication Service )是 Yale 大學(xué)發(fā)起的一個(gè)企業(yè)級(jí)的、開(kāi)源的項(xiàng)目,旨在為 Web 應(yīng)用系統(tǒng)提供一種可靠的單點(diǎn)登...

    warkiz 評(píng)論0 收藏0
  • CAS 5.2.x 單點(diǎn)登錄 - 實(shí)現(xiàn)原理及源碼淺析

    摘要:上一篇文章簡(jiǎn)單介紹了在本地開(kāi)發(fā)環(huán)境中搭建服務(wù)端和客戶端,對(duì)單點(diǎn)登錄過(guò)程有了一個(gè)直觀的認(rèn)識(shí)之后,本篇將探討單點(diǎn)登錄的實(shí)現(xiàn)原理。因此引入服務(wù)端作為用戶信息鑒別和傳遞中介,達(dá)到單點(diǎn)登錄的效果。為該流程的實(shí)現(xiàn)類(lèi)。表示對(duì)返回結(jié)果的處理。 上一篇文章簡(jiǎn)單介紹了 CAS 5.2.2 在本地開(kāi)發(fā)環(huán)境中搭建服務(wù)端和客戶端,對(duì)單點(diǎn)登錄過(guò)程有了一個(gè)直觀的認(rèn)識(shí)之后,本篇將探討 CAS 單點(diǎn)登錄的實(shí)現(xiàn)原理。 一...

    elisa.yang 評(píng)論0 收藏0
  • 什么是單點(diǎn)登錄(SSO)

    摘要:此時(shí),用戶想要訪問(wèn)系統(tǒng)受限的資源比如說(shuō)訂單功能,訂單功能需要登錄后才能訪問(wèn),系統(tǒng)發(fā)現(xiàn)用戶并沒(méi)有登錄,于是重定向到認(rèn)證中心,并將自己的地址作為參數(shù)。 前言 只有光頭才能變強(qiáng)。文本已收錄至我的GitHub倉(cāng)庫(kù),歡迎Star:https://github.com/ZhongFuCheng3y/3y 在我實(shí)習(xí)之前我就已經(jīng)在看單點(diǎn)登錄的是什么了,但是實(shí)習(xí)的時(shí)候一直在忙其他的事,所以有幾個(gè)網(wǎng)站就...

    levy9527 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<