搭建cas服務(wù)器

公司有幾個(gè)系統(tǒng)想做SSO,然后開(kāi)始研究cas。系統(tǒng)是Centos7

搭建CAS服務(wù)器#

cas的版本比較多,先在網(wǎng)上搜了一下各種教程配置經(jīng)驗(yàn)。本來(lái)想搭建最新的CAS版本,然而為了快速部署,選擇了網(wǎng)上教程比較詳細(xì)的cas-4.0.0版本。

  1. 安裝包和環(huán)境依賴(lài)
    cas-server是依賴(lài)jdk,tomcat,spring等,jdk和tomcat裝最新版本就可以了,cas-server這里選了4.0.0.因?yàn)榘姹静煌渲眠€有是區(qū)別的,所以這里強(qiáng)調(diào)一下版本。因?yàn)闆](méi)玩過(guò)JAVA,spring framework我沒(méi)裝,可能是tomcat自帶的。。新版本的cas-server好像是通過(guò)maven來(lái)裝,具體怎么裝我不知道。。但是有點(diǎn)想研究,看以后會(huì)不會(huì)填坑。
    1.1 jdk
    yum install 安裝貌似默認(rèn)是1.7,然后我選了1.8
    1.2 tomcat
    yum install 安裝最新版
    1.3 spring framework
    我沒(méi)裝。。然后沒(méi)啥影響。。
    1.3 cas-server-4.0.0
    在cas官網(wǎng)下載的,速度超級(jí)慢。不知道有沒(méi)有鏡像。下載完成然后解壓。進(jìn)入文件夾 找到cas-server-4.0.0/modules/cas-server-webapp-4.0.0.war這個(gè) war 文件,拷貝到tomcat的webapps目錄下。默認(rèn)目錄在/usr/local/tomcat/webapps/。以前沒(méi)玩過(guò)JAVA不知道,原來(lái)war文件拷貝過(guò)來(lái)就會(huì)馬上自動(dòng)解壓成文件夾,然后war移動(dòng)或刪除那個(gè)同名文件壓也會(huì)被刪!modules 目錄下的其他jar是可能需要的依賴(lài)包,放到webapps下面自動(dòng)生成的文件夾里的WEB-INF/lib/下,比如我這里叫cas-server-webapp-4.0.0/WEB-INF/lib/。然后啟動(dòng)tomcat,在瀏覽器打開(kāi)。
    tomcat的啟動(dòng)和關(guān)閉在tomcat目錄下的bin/目錄的shutdown.shstartup.sh:

    tomcat重啟

    (吐槽下tomcat的重啟慢到令人發(fā)指,推薦一個(gè)解決辦法

  2. 導(dǎo)入證書(shū)OR去除https限制
    2.1 生成ssl證書(shū)
    cas默認(rèn)使用https,需要ssl證書(shū)。我跟著步驟生成了一個(gè)crt證書(shū),然后就不知道干嘛了。所以還是老老實(shí)實(shí)用http跑通再說(shuō)。
    2.2 去除https限制
    主要有3個(gè)地方需要修改:
    2.21 WEB-INF/deployerConfigContext.xml 找到 proxyAuthenticationHandle 添加屬性 p:requireSecure="false".

    <bean id="proxyAuthenticationHandler"
          class="org.jasig.cas.authentication.handler.support.HttpBasedServiceCredentialsAuthenticationHandler"
          p:httpClient-ref="httpClient"
          p:requireSecure="false" />
2.22 `WEB-INF/spring-configuration/ticketGrantingTicketCookieGenerator.xml` 將 `p:cookieSecure="true"` 改為 `p:cookieSecure="false"`
    <bean id="ticketGrantingTicketCookieGenerator" class="org.jasig.cas.web.support.CookieRetrievingCookieGenerator"
          p:cookieSecure="false"
          p:cookieMaxAge="-1"
          p:cookieName="CASTGC"
          p:cookiePath="/cas" />
2.23 `WEB-INF/spring-configuration/warnCookieGenerator.xml` 將 `p:cookieSecure="true"` 改為 `p:cookieSecure="false"`。 同上
  1. 驗(yàn)證方式
    比較好奇應(yīng)該90%都會(huì)使用數(shù)據(jù)庫(kù)的用戶和密碼進(jìn)行認(rèn)證吧,為啥cas的默認(rèn)認(rèn)證方式不設(shè)置成數(shù)據(jù)庫(kù)方式呢。難道是為了給用戶自己選擇數(shù)據(jù)庫(kù)的自由?這里主要是3個(gè)XML屬性配置
    3.0 依賴(lài)包
    +. mysql-connector-java-5.1.42.jar 跟版本關(guān)系不大
    +. c3p0-0.9.1.2.jar 這個(gè)很關(guān)鍵
    +. cas-server-support-jdbc-4.0.0.jar 注意跟cas-server版本一致
    3.1 數(shù)據(jù)源(數(shù)據(jù)庫(kù)配置)
    <bean id="dataSource"
          class="com.mchange.v2.c3p0.ComboPooledDataSource"
          p:driverClass="${database.driverClass}"
          p:jdbcUrl="${database.url}"
          p:user="${database.user}"
          p:password="${database.password}" />
網(wǎng)上配置教程大都是直接把配置寫(xiě)到這里,我這里建議用官方文檔的變量方式,一來(lái)避免`jdbcUrl`的特殊字符編碼問(wèn)題,而來(lái)方便修改配置。這些變量都可以在同目錄下的 `cas.properties`中配置 
    # == Basic database connection pool configuration ==
    database.driverClass=com.mysql.jdbc.Driver
    database.url=jdbc:mysql://localhost:3306/cas_test?useUnicode=true&characterEncoding=UTF8
    database.user=root
    database.password=root

3.2 加密算法

    <bean id="passwordEncoder"
        class="org.jasig.cas.authentication.handler.DefaultPasswordEncoder"
        c:encodingAlgorithm="SHA1"
        p:characterEncoding="UTF-8" />
系統(tǒng)自帶MD5和SHA1加密算法,可以自定義,然而因?yàn)槲覜](méi)搞過(guò)JAVA所以就停留在這一步,沒(méi)有深入研究。

3.3 認(rèn)證方式

    <bean id="dbAuthHandler"
        class="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler"
        p:dataSource-ref="dataSource"
        p:passwordEncoder-ref="passwordEncoder"
        p:sql="SELECT `password` FROM `cas_user` WHERE `username`=?" />
可以看出上面2個(gè)配置項(xiàng)都是給這個(gè)做鋪墊。這個(gè)SQL語(yǔ)句根據(jù)自己的數(shù)據(jù)庫(kù)進(jìn)行查詢。網(wǎng)上教程有提到還有一個(gè)地方要修改
        <entry key-ref="proxyAuthenticationHandler" value-ref="proxyPrincipalResolver" />
        <!-- <entry key-ref="primaryAuthenticationHandler" value-ref="primaryPrincipalResolver" /> -->
        <entry key-ref="dbAuthHandler" value-ref="primaryPrincipalResolver" />
個(gè)人理解這里不一定要改成這樣,如果保留原來(lái)的`primaryAuthenticationHandler`那么需要把原來(lái)的`<bean id="primaryAuthenticationHandler"...`給注釋掉。而另指定一個(gè)認(rèn)證器`dbAuthHandler`就可以不用注釋掉原來(lái)的。到這里配置完成。

我在這里配置了無(wú)數(shù)遍,然后各種錯(cuò)誤。而且我又不知道怎么查看java/tomcat錯(cuò)誤,最后莫名其妙成功了。總結(jié)一下可能出錯(cuò)的地方:
dataSource 中的 class , 網(wǎng)上有的給出來(lái)的不一樣,建議以官網(wǎng)為主
jdbcUrl 可能有特殊字符編碼問(wèn)題,建議寫(xiě)到 cas.properties
依賴(lài)包不對(duì)

  1. 返回用戶信息
    4.1 從數(shù)據(jù)庫(kù)查詢更多信息
    <!-- 查詢更多用戶字段 -->
    <bean  class="org.jasig.services.persondir.support.jdbc.SingleRowJdbcPersonAttributeDao" id="attributeRepository">
        <constructor-arg index="0" ref="dataSource"/>
        <!-- 這里配置查詢語(yǔ)句, {0},{1}對(duì)應(yīng)接下來(lái)的`queryAttributeMapping`的map索引 -->
        <constructor-arg index="1" value="select * from cas_user where {0}"/>
        <property name="queryAttributeMapping">
            <map>
                <!--這里的key需寫(xiě)username和登錄頁(yè)面一致,value對(duì)應(yīng)數(shù)據(jù)庫(kù)用戶名字段-->
                <entry key="username" value="username"/>
            </map>
        </property>
        <property name="resultAttributeMapping">
            <map>
                <!--key為對(duì)應(yīng)的數(shù)據(jù)庫(kù)字段名稱(chēng),value為提供給客戶端獲取的屬性名字,系統(tǒng)會(huì)自動(dòng)填充值-->
                <entry key="id" value="uid"/>
                <entry key="username" value="username"/>
                <entry key="password" value="password"/>
                <entry key="email" value="email"/>
                <entry key="cnName" value="cname"/>
            </map>
        </property>
        <!--    
        <property name="queryType">  
            <value>OR</value>  
        </property>   
        -->
    </bean>
4.2 配置返回字段
    <util:list id="registeredServicesList">
        <bean class="org.jasig.cas.services.RegexRegisteredService"
              p:id="0" p:name="HTTP and IMAP" p:description="Allows HTTP(S) and IMAP(S) protocols"
              p:serviceId="^(https?|imaps?)://.*" p:evaluationOrder="10000001">
        <!-- 這里是重點(diǎn) -->
        <property name="allowedAttributes">
              <list>
                  <value>uid</value>
                  <value>username</value>
                  <value>password</value>
                  <value>email</value>
                  <value>cname</value>
              </list>
          </property>
        </bean>
    ...

到這里cas服務(wù)端的配置基本完成了。good luck。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • 一、編譯 1. 下載最新版的cas : https://codeload.github.com/apereo/ca...
    湯湯的閱讀 1,012評(píng)論 0 2
  • 【環(huán)境說(shuō)明】: 本文演示過(guò)程在同一個(gè)機(jī)器上的(也可以在三臺(tái)實(shí)體機(jī)器或者三個(gè)的虛擬機(jī)上),環(huán)境如下: windows...
    yljava閱讀 9,334評(píng)論 3 8
  • 【環(huán)境說(shuō)明】:本文演示過(guò)程在同一個(gè)機(jī)器上的(也可以在三臺(tái)實(shí)體機(jī)器或者三個(gè)的虛擬機(jī)上),環(huán)境如下: windows7...
    黃海佳閱讀 8,831評(píng)論 2 15
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 134,923評(píng)論 18 139
  • JEESZ分布式框架單點(diǎn)登錄集成方案 第一節(jié):?jiǎn)吸c(diǎn)登錄簡(jiǎn)介 第一步:了解單點(diǎn)登錄 SSO主要特點(diǎn)是: SSO應(yīng)用之...
    ITsupuerlady閱讀 718評(píng)論 0 0