CAS 單點登陸【1】入門

1. CAS 的引入的前提和好處

   很早期的公司,一家公司可能只有一個應用,慢慢的應用開始變多,如員工報銷系統、審覈系統、學習系統......git

   每一個應用都要進行註冊登陸,退出的時候又要一個個退出,用戶操做起來確實有點崩潰。github

   咱們想要另外一種登陸體驗,公司裏面的應用只要一次註冊,登陸的時候只要一次登陸,退出的時候只要一次退出,這樣就完美了。web

   CAS 算是最廣泛、最通用的單點解決方案,但若是自家公司大牛雲集,也不妨依據公司業務本身造輪子。spring

   JA-SIG CAS(Central Authentication Service)爲 Web 應用系統提供了單點登陸服務。它的特性包括:數據庫

   一個開放和具備很好文檔支持的協議;tomcat

   一個Java開源服務器組件;安全

   提供多種類型的客戶端包括 Java、.Net、PHP、Perl、Apache、uPortal等;服務器

   可以與uPortal、BlueSocket、TikiWiki、 Mule、 Liferay、Moodle集成使用。cookie

   從 github 下載源碼進行編譯打包便可獲得服務端 war,官網地址:https://www.apereo.org/projects/cassession

   此篇博客算是 CAS 簡單入門,去掉了複雜的 HTTPS 協議、採用默認的 CAS 服務端檢驗方法和憑證,目的是新手能快速搭建單點環境。

   在實際項目中使用時,確定會作不少個性化的定製,如單點登錄頁面、服務端用戶的校驗方式、會話中存儲的用戶對象結構等等。

2. 取消 HTTPS 協議配置的方法

   因爲 CAS 默認是基於 HTTPS 協議,因此須要配置服務端的 tomcat,使之支持SSL安全協議訪問。

   但對於初次體驗的人來講,仍是建議取消 CAS 默認的 HTTPS 協議,能節省不少的麻煩和配置過程。

   須要進行修改的配置文件:

WEB-INF/deployerConfigContext.xml < bean class = "org.jasig.cas.authentication.handler.support.HttpBasedServiceCredentialsAuthenticationHandler" p:httpClient-ref = "httpClient" /> 增長參數 p:requireSecure="false",是否須要安全驗證即 HTTPS,false爲不採用 以下: < bean class = "org.jasig.cas.authentication.handler.support.HttpBasedServiceCredentialsAuthenticationHandler" p:httpClient-ref = "httpClient" p:requireSecure= "false" />
WEB-INF/spring-configuration/ticketGrantingTicketCookieGenerator.xml 
修改 p:cookieSecure="true" 爲 p:cookieSecure="false",即不須要安全 cookie 以下:
< bean id = "ticketGrantingTicketCookieGenerator" class = "org.jasig.cas.web.support.CookieRetrievingCookieGenerator" p:cookieSecure = "false" p:cookieMaxAge = "-1" p:cookieName = "CASTGC" p:cookiePath = "/cas" />
WEB-INF\spring-configuration\warnCookieGenerator.xml 修改 p:cookieSecure="true" 爲 p:cookieSecure="false",即不須要安全 cookie 以下: < bean id = "warnCookieGenerator" class = "org.jasig.cas.web.support.CookieRetrievingCookieGenerator" p:cookieSecure = "false" p:cookieMaxAge = "-1" p:cookieName = "CASPRIVACY" p:cookiePath = "/cas" />

3. 服務端的搭建

   從 github clone 下來的源碼進行編譯和打包,而後將對應的 war 包放入 tomcat webapp 下啓動 tomcat。

   

    服務端默認採用的是靜態帳號和密碼的驗證方式,WEB-INF/deployerConfigContext.xml 以下。

  <bean id="primaryAuthenticationHandler" class="org.jasig.cas.authentication.AcceptUsersAuthenticationHandler">
        <property name="users">
            <map>
                <entry key="casuser" value="Mellon"/>
            </map>
        </property>
    </bean>

   這裏固然能夠自定義校驗類(必改的地方),能夠經過數據庫帳號密碼、特殊的業務邏輯等等,只要符合 CAS 的返回值便可。

   <bean id="authenticationManager" class="org.jasig.cas.authentication.PolicyBasedAuthenticationManager">
        <constructor-arg>
            <map>
                <!-- | IMPORTANT | Every handler requires a unique name. | If more than one instance of the same handler class is configured, you must explicitly | set its name to something other than its default name (typically the simple class name). -->
                <entry key-ref="proxyAuthenticationHandler" value-ref="proxyPrincipalResolver" />
                <entry key-ref="primaryAuthenticationHandler" value-ref="primaryPrincipalResolver" />
            </map>
        </constructor-arg>

4. 多應用的集成和使用

   服務端搭建起來後,其餘應用只須要簡單的幾部配置就能夠輕鬆經過 CAS 單點進行用戶的驗證。

   依賴對應的客戶端 jar :

<dependency>
    <groupId>org.jasig.cas.client</groupId>
    <artifactId>cas-client-core</artifactId>
    <version>${cas.client.version}</version>
</dependency>

   配置 web.xml 以下: 

 <listener>
        <listener-class>org.jasig.cas.client.session.SingleSignOutHttpSessionListener</listener-class>
    </listener>

    <filter>
        <description>該過濾器用於實現單點登出功能,需放在全部單點過濾器前面</description>
        <filter-name>CAS Single Sign Out Filter</filter-name>
        <filter-class>org.jasig.cas.client.session.SingleSignOutFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>CAS Single Sign Out Filter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    <filter>
        <description>核心單點過濾器</description>
        <filter-name>CAS Filter</filter-name>
        <filter-class>org.jasig.cas.client.authentication.AuthenticationFilter</filter-class>
        <init-param>
            <param-name>casServerLoginUrl</param-name>
            <param-value>http://127.0.0.1:8080/cas</param-value>
        </init-param>
        <init-param>
            <param-name>serverName</param-name>
            <param-value>http://127.0.0.1:8081/</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>CAS Filter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    <filter>
        <description>該過濾器負責對Ticket的校驗工做,必須啓用它</description>
        <filter-name>CAS Validation Filter</filter-name>
        <filter-class> org.jasig.cas.client.validation.Cas10TicketValidationFilter </filter-class>
        <init-param>
            <param-name>casServerUrlPrefix</param-name>
            <param-value>http://127.0.0.1:8080/cas</param-value>
        </init-param>
        <init-param>
            <param-name>serverName</param-name>
            <param-value>http://127.0.0.1:8081/</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>CAS Validation Filter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

   到此,整個單點服務端和應用端的使用都已描述如上,已親測可用。

相關文章
相關標籤/搜索