日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

单点登陆框架CAS的研究

發(fā)布時(shí)間:2024/4/15 编程问答 51 豆豆
生活随笔 收集整理的這篇文章主要介紹了 单点登陆框架CAS的研究 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

CAS作為開源的單點(diǎn)登陸框架已經(jīng)非常的流行了。由于它對(duì)已有系統(tǒng)的入侵性小,支持的語(yǔ)言多,備受廣大開發(fā)者關(guān)注;也是很多公司將之作為單點(diǎn)登陸的首選框架。關(guān)于CAS如何搭建的文章,網(wǎng)上已經(jīng)非常多了,隨便搜搜都一大堆。我也就不再寫些重復(fù)的東西了,但是網(wǎng)上的東西有時(shí)候常常是不全,或版本問題搞的很多人都很迷糊。我曾經(jīng)也很迷糊,如果剛接觸CAS,請(qǐng)你繼續(xù)往下看;如果你是CAS高手,請(qǐng)指正我說(shuō)錯(cuò)的地方。

CAS最早是耶魯大學(xué)開發(fā)的(CAS2.0以前的版本),后來(lái)開源出來(lái)由JASIG來(lái)繼續(xù)開發(fā)(CAS2.0以后的版本)。所以,當(dāng)你準(zhǔn)備那某一片文章上手練習(xí)的時(shí)候請(qǐng)分清版本。個(gè)人建議還是閱讀JASIG官方文檔比較好。https://wiki.jasig.org/display/CASC

一個(gè)完整的單點(diǎn)登陸方案分兩部分

CAS server

CAS server如何配置就不多說(shuō)了,基本的步驟就是

1. 下載CAS server包

2. 配置Tomcat的Https訪問設(shè)置

3. 部署CAS server,其實(shí)就是將.war文件拷貝到Tomcat目錄下

4. 生成證書(可以買,也可以使用自簽名證書,或者干脆就用http協(xié)議,那就不需要證書了)

5. 修改用戶訪問配置(CAS支持關(guān)系數(shù)據(jù)庫(kù),LDAP等多種數(shù)據(jù)存儲(chǔ))

?

CAS client

CAS client是部署在應(yīng)用端的,因?yàn)橥ǔ吸c(diǎn)登陸都會(huì)涉及到對(duì)已有系統(tǒng)的改造。所以,client端的侵入性就變的很重要。侵入性越小,越容易部署和測(cè)試。CAS框架的優(yōu)點(diǎn)之一就在于它的client端對(duì)應(yīng)用系統(tǒng)的侵入性比較小。對(duì)于Java的Web項(xiàng)目來(lái)說(shuō),你只需要在web.xml里面添加一個(gè)filter,拷貝CAS client的jar包到應(yīng)用系統(tǒng),然后改造登陸認(rèn)證過(guò)程即可。如果CAS server用的是Https,那就還需要將證書導(dǎo)入到JVM的可信證書域中,通常是($JAVA_HOME/lib/security/cacerts)。

?

所有的一切看著都挺簡(jiǎn)單的,但實(shí)際部署中你會(huì)遇到各式各樣的問題。有很多問題網(wǎng)上都有人解答,這里我就記錄一下我遇到的一個(gè)沒找到答案的問題?

現(xiàn)象:

當(dāng)你配置完CAS server, 也部署了CAS client后。用https登陸CAS server也都沒問題時(shí),而你無(wú)論如何都無(wú)法在登陸后跳轉(zhuǎn)到你期待的頁(yè)面。盡管一切看起來(lái)都配置對(duì)了,證書也導(dǎo)了,https也配了,filter也加了。但是還是不停的拋CAS ticket validation expection, CAS server no response錯(cuò)誤。

解決方案:

請(qǐng)檢查你的client是否把4個(gè)filter都配置全了,并且順序要對(duì)。

<!-- CAS SSO --><filter><filter-name>CAS Authentication Filter</filter-name><filter-class>org.jasig.cas.client.authentication.AuthenticationFilter</filter-class><init-param><param-name>casServerLoginUrl</param-name><param-value>https://cas-server:8443/cas/login</param-value></init-param><init-param><param-name>renew</param-name><param-value>false</param-value></init-param><init-param><param-name>gateway</param-name><param-value>false</param-value></init-param><init-param><param-name>serverName</param-name><param-value>http://client-host:8080</param-value></init-param></filter><filter><filter-name>CAS Validation Filter</filter-name><filter-class>org.jasig.cas.client.validation.Cas20ProxyReceivingTicketValidationFilter</filter-class><init-param><param-name>casServerUrlPrefix</param-name><param-value>https://cas-server:8443/cas/</param-value></init-param><init-param><param-name>serverName</param-name><param-value>http://client-host:8080</param-value></init-param><init-param><param-name>useSession</param-name><param-value>true</param-value></init-param><init-param><param-name>redirectAfterValidation</param-name><param-value>true</param-value></init-param></filter><filter><filter-name>CAS HttpServletRequest Wrapper Filter</filter-name><filter-class>org.jasig.cas.client.util.HttpServletRequestWrapperFilter</filter-class></filter><filter><filter-name>CAS Assertion Thread Local Filter</filter-name><filter-class>org.jasig.cas.client.util.AssertionThreadLocalFilter</filter-class></filter><filter-mapping><filter-name>CAS Authentication Filter</filter-name><url-pattern>/sso/*</url-pattern></filter-mapping><filter-mapping><filter-name>CAS Validation Filter</filter-name><url-pattern>/sso/*</url-pattern></filter-mapping><filter-mapping><filter-name>CAS HttpServletRequest Wrapper Filter</filter-name><url-pattern>/sso/*</url-pattern></filter-mapping><filter-mapping><filter-name>CAS Assertion Thread Local Filter</filter-name><url-pattern>/sso/*</url-pattern></filter-mapping>

官方文檔特別說(shuō)明這4個(gè)Filter是必須的

The correct order of the filters in web.xml is necessary:

  • AuthenticationFilter
  • TicketValidationFilter (whichever one is chosen)
  • HttpServletRequestWrapperFilter
  • AssertionThreadLocalFilter
  • 這里我要說(shuō)明一下為什么這4個(gè)filter是必須要配的。

    ?AuthenticationFilter的作用是用于攔截SSO登陸請(qǐng)求的,當(dāng)你提交的request符合SSO登陸規(guī)則,CAS client會(huì)通過(guò)這個(gè)filter將登陸請(qǐng)求轉(zhuǎn)向到CAS server的登陸界面。因?yàn)檫@是第一步,所以它要在最上面。

    TicketValidationFilter的作用是用于攔截登陸返回的跳轉(zhuǎn)請(qǐng)求的。當(dāng)CAS server確認(rèn)登陸用戶名密碼后,會(huì)返回一個(gè)server ticket,這個(gè)ticket會(huì)由應(yīng)用服務(wù)器上的CAS client再送回CAS server進(jìn)行驗(yàn)證,用于防止仿冒攻擊的。

    HttpServletRequestWrapperFilter的目的是將CAS server返回的信息封裝到Http request里面,這樣客戶端就可以用request.getRemoteUser()來(lái)獲取用戶名等信息了。

    AssertionThreadLocalFilter的作用是用于前端程序(通常是前端腳本程序)訪問,因?yàn)檫@個(gè)時(shí)候你無(wú)法通過(guò)request來(lái)獲取信息。

    所以如果這4個(gè)filter不配置正確,就會(huì)報(bào)各種錯(cuò)誤。

    總結(jié)

    以上是生活随笔為你收集整理的单点登陆框架CAS的研究的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。