單點(diǎn)登錄CAS

做項(xiàng)目的過(guò)程中涉及單點(diǎn)登錄,自己也整理過(guò)ppt在小組內(nèi)分享過(guò),現(xiàn)在把它整理成一篇博文。
單點(diǎn)登錄ppt下載地址

簡(jiǎn)介

單點(diǎn)登錄(Single Sign On),簡(jiǎn)稱為 SSO,是目前比較流行的企業(yè)業(yè)務(wù)整合的解決方案之一。SSO的定義是在多個(gè)應(yīng)用系統(tǒng)中,用戶只需要登錄一次就可以訪問(wèn)所有相互信任的應(yīng)用系統(tǒng)。

現(xiàn)在主流的就是CAS這種基于session的單點(diǎn)登錄形式。

舉個(gè)例子:你在xx首頁(yè)登錄一下,下一次訪問(wèn)xx考啦考試系統(tǒng)或xx車輛管理系統(tǒng)的時(shí)候就可以免去登錄。

回顧下cookie與session

Cookie技術(shù): 會(huì)話數(shù)據(jù)保存在瀏覽器客戶端。
Cookie核心的API:
1. 在服務(wù)器端創(chuàng)建Cookie對(duì)象
Cookeie cookie = new Cookie("name","value");
2. 把cookie發(fā)送給瀏覽器端(通過(guò)響應(yīng)頭:set-cookie)
response.addCookie(cookie);
3. 瀏覽器帶著cookie信息訪問(wèn)服務(wù)器(通過(guò)請(qǐng)求頭:cookie),服務(wù)器得到cookie信息
Cookie[] cookies = request.getCookies();
局限:
* 只能保存字符串類型,不能保存中文
* 一個(gè)cookie不能超過(guò)4kb

Session技術(shù):會(huì)話數(shù)據(jù)保存在服務(wù)器端。(內(nèi)存)
Session核心的API:
1. 創(chuàng)建或得到session對(duì)象
HttpSession session = request.getSession(); //創(chuàng)建或得到session對(duì)象
上面代碼解讀:若瀏覽器第一次訪問(wèn),服務(wù)器會(huì)響應(yīng)一個(gè)cookie給瀏覽器。這個(gè)cookie記錄的就是sessionId,tomcat生成的sessionid叫做jsessionid。以后每次訪問(wèn)攜帶著這個(gè)sessionId,在服務(wù)器里找這個(gè)sessionId。找到后就可以獲取這個(gè)sessionId里面的數(shù)據(jù)。
2. 會(huì)話數(shù)據(jù)保存session對(duì)象中,和得到會(huì)話數(shù)據(jù)
session.setAttribute("name",Object); 保存數(shù)據(jù)
session.getAttribute("name") 得到數(shù)據(jù)
注意:
* session.setIntactiveInterval(時(shí)間); 設(shè)置session過(guò)期時(shí)間
* session.invalidate() 手動(dòng)銷毀session對(duì)象

Cas 結(jié)構(gòu)

CAS分為兩部分,CAS Server和CAS Client

CAS Server用來(lái)負(fù)責(zé)用戶的認(rèn)證工作,就像是把第一次登錄用戶的一個(gè)標(biāo)識(shí)存在這里,以便此用戶在其他系統(tǒng)登錄時(shí)驗(yàn)證其需不需要再次登錄。
CAS Client就是我們自己的應(yīng)用,需要接入CAS Server端。當(dāng)用戶訪問(wèn)我們的應(yīng)用時(shí),首先需要重定向到CAS Server端進(jìn)行驗(yàn)證,要是原來(lái)登陸過(guò),就免去登錄,重定向到下游系統(tǒng),否則進(jìn)行用戶名密碼登陸操作。

前期鋪底

  • Ticket Granting ticket (TGT) :可以認(rèn)為是CAS Server根據(jù)用戶名密碼生成的一張票,存在server端
  • Ticket-granting cookie (TGC) :其實(shí)就是一個(gè)cookie,存放用戶身份信息,由server發(fā)給client端
  • Service ticket (ST) :由TGT生成的一次性票據(jù),用于驗(yàn)證,只能用一次。相當(dāng)于server發(fā)給client一張票,然后client拿著這是個(gè)票再來(lái)找server驗(yàn)證,看看是不是server簽發(fā)的。就像是我給了你一張我的照片,然后你拿照片再來(lái)問(wèn)我,這個(gè)照片是不是你。。。沒(méi)錯(cuò),就是這么無(wú)聊。

Cas 流程

image.png

這是簡(jiǎn)化Cas 流程圖
image.png

這是Cas官方的流程圖,簡(jiǎn)單明了,訪問(wèn)地址如下
https://apereo.github.io/cas/5.2.x/protocol/CAS-Protocol.html

Cas Server 搭建流程

參考博文:http://www.itdecent.cn/p/71b0f56e4891

Cas Client

CasClient配置
https://iam.harvard.edu/resources/cas-integration
過(guò)濾器相關(guān)博文
http://blog.csdn.net/yuwenruli/article/details/6612010

Cas 單點(diǎn)登錄案例

https://github.com/coder-huang/sso-shiro-cas

Springboot-shiro-cas

http://blog.csdn.net/catoop/article/details/50534006

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容