CAS單點(diǎn)登錄原理簡(jiǎn)單介紹
1. SSO簡(jiǎn)介
1.1 單點(diǎn)登錄定義
單點(diǎn)登錄(Single sign on),英文名稱縮寫SSO,SSO的意思就是在多系統(tǒng)的環(huán)境中,登錄單方系統(tǒng),就可以在不用再次登錄的情況下訪問相關(guān)受信任的系統(tǒng)。也就是說只要登錄一次單體系統(tǒng)就可以。計(jì)劃在項(xiàng)目中加入單點(diǎn)登錄,開發(fā)中,taoshop
1.2 單點(diǎn)登錄角色
單點(diǎn)登錄一般包括下面三種角色:
①用戶(多個(gè));
②認(rèn)證中心(一個(gè));
③Web應(yīng)用(多個(gè))。
PS:這里所說的web應(yīng)用可以理解為SSO Client,認(rèn)證中心可以說是SSO Server。
2. CAS簡(jiǎn)介
2.1 CAS簡(jiǎn)單定義
CAS(Center Authentication Service)是耶魯大學(xué)研究的一款開源的單點(diǎn)登錄項(xiàng)目,主要為web項(xiàng)目提供單點(diǎn)登錄實(shí)現(xiàn),屬于Web SSO。
2.2 CAS體系結(jié)構(gòu)
CAS體系結(jié)構(gòu)分為CAS Server和CAS Client。

PS:圖來自官網(wǎng)
2.3 CAS原理
下面給出一張來自CAS官方的圖片
CAS登錄等系統(tǒng)分為CAS Server和CAS Client,下面,我根據(jù)我的理解稍微解釋一下:
1、用戶訪問CAS Client請(qǐng)求資源
2、客戶端程序做了重定向,重定向到CAS Server
3、CAS Server會(huì)對(duì)請(qǐng)求做認(rèn)證
4、認(rèn)證通過后會(huì)生成一個(gè)Ticket返回Cas Client
5、然后Cas Client就帶著Ticket再次訪問Cas Server,CAS Server進(jìn)行Ticket驗(yàn)證
6、CAS Server對(duì)Ticket進(jìn)行再次驗(yàn)證,然后通過就返回用戶信息,用戶拿到信息后就可以登錄
看到這個(gè)過程,我們大概就能理解CAS是怎么實(shí)現(xiàn)的,看起來過程挺多的,不過這些過程都是CAS在后臺(tái)做的
CAS單點(diǎn)登錄
現(xiàn)在博客簡(jiǎn)單介紹一下,CAS Server簡(jiǎn)單部署實(shí)現(xiàn),CAS是一款開源框架,目前應(yīng)用比較廣泛。下面簡(jiǎn)單介紹一下:
cas開源到github上,不過只有幾個(gè)版本有cas release服務(wù)端,其它大部分版本都只有source源碼而已,所以其它版本都需要自己編譯,不想自己編譯的可以下載V4.0.0版本的。
https://github.com/apereo/cas/releases/tag/v4.0.0
下載cas server之后,我們就可以簡(jiǎn)單部署一下,中間件可以用Tomcat
cas的安全機(jī)制是依靠SSL實(shí)現(xiàn)的,所以一般的http非安全鏈接不支持的,雖然是這么說,不過學(xué)習(xí)練習(xí)的話,也可以去掉https要求,下面介紹說一下:
可以先將cas-server-4.0.0-release.zip解壓到Tomcat的webapp目錄下面,然后需要修改一個(gè)配置文件
(1)、先修改一下cas-server-4.0.0-release的WEB-INF下面的deployerConfigContext.xml
修改前:
id ="proxyAuthenticationHandler"
class="org.jasig.cas.authentication.handler.support.HttpBasedServiceCredentialsAuthenticationHandler"
p:httpClient-ref="httpClient" />
修改后,PS:加上p:requireSecure="false"
"proxyAuthenticationHandler"
class="org.jasig.cas.authentication.handler.support.HttpBasedServiceCredentialsAuthenticationHandler"
p:httpClient-ref="httpClient" p:requireSecure="false"/>
(2)、修改WEB-INF下面的spring-configuration文件夾下面的ticketGrantingTicketCookieGenerator.xml
修改前:
"ticketGrantingTicketCookieGenerator" class="org.jasig.cas.web.support.CookieRetrievingCookieGenerator"
p:cookieSecure="true"
p:cookieMaxAge="-1"
p:cookieName="CASTGC"
p:cookiePath="/cas" />
修改后,PS:改為p:cookieSecure="false"
"ticketGrantingTicketCookieGenerator" class="org.jasig.cas.web.support.CookieRetrievingCookieGenerator"
p:cookieSecure="false"
p:cookieMaxAge="-1"
p:cookieName="CASTGC"
p:cookiePath="/cas" />
(3)、修改WEB-INF下面的spring-configuration文件夾下面的warnCookieGenerator.xml
修改前:
"warnCookieGenerator" class="org.jasig.cas.web.support.CookieRetrievingCookieGenerator"
p:cookieSecure="true"
p:cookieMaxAge="-1"
p:cookieName="CASPRIVACY"
p:cookiePath="/cas" />
修改后,PS:改為p:cookieSecure="false"
"warnCookieGenerator" class="org.jasig.cas.web.support.CookieRetrievingCookieGenerator"
p:cookieSecure="false"
p:cookieMaxAge="-1"
p:cookieName="CASPRIVACY"
p:cookiePath="/cas" />
(4)、修改CAS默認(rèn)登錄jsp頁面
可以注釋W(xué)EB-INF\view\jsp\default\ui\casLoginView.jsp頁面如下代碼
test ="${not pageContext.request.secure}">
id="msg" class="errors">
Non-secure Connection
You are currently accessing CAS over a non-secure connection. Single Sign On WILL NOT WORK. In order to have single sign on work, you MUST log in over HTTPS.
去掉Https支持要求后,就可以通過http的鏈接登錄cas server了,用戶名是casuser,密碼是Mellon
PS:可以在deployerConfigContext.xml里看到配置,正規(guī)項(xiàng)目是實(shí)現(xiàn)jdbc支持
"primaryAuthenticationHandler"
class="org.jasig.cas.authentication.AcceptUsersAuthenticationHandler">
name ="users">
key ="casuser" value="Mellon"/>
登錄成功
待續(xù)...,PS:找時(shí)間繼續(xù)寫...

騰訊、阿里、滴滴后臺(tái)面試題匯總總結(jié) — (含答案)
面試:史上最全多線程面試題 !
最新阿里內(nèi)推Java后端面試題
JVM難學(xué)?那是因?yàn)槟銢]認(rèn)真看完這篇文章

關(guān)注作者微信公眾號(hào) —《JAVA爛豬皮》
了解更多java后端架構(gòu)知識(shí)以及最新面試寶典


看完本文記得給作者點(diǎn)贊+在看哦~~~大家的支持,是作者源源不斷出文的動(dòng)力
