天天看點

CAS單點登入原理與實作(服務端用戶端搭建)

1.什麼是單點登入

特别注意

    本文講的是CAS單點登入CAS4.0.0版本,CAS預設認證方式使用的事HTTPS協定,一般對安全性不高的話建議取消改成HTTP方式,因為開啟的話會經常提示證書過去,需要使用者确認等,對客戶感覺不好。目前有需要可以開啟。

      單點登入(Single Sign On),簡稱為 SSO,是目前比較流行的企業業務整合的解決方案之一。SSO的定義是在多個應用系統中,使用者隻需要登入一次就可以通路所有互相信任的應用系統。

   舉例:上豆瓣,要登入豆瓣FM、豆瓣讀書、豆瓣電影、豆瓣日記,如果我們通路豆瓣讀書、豆瓣電影、豆瓣日記都需要進行一次登入認證,那麼使用者體驗是非常不好的。是以引用了單點登入。隻要一次登入就可以通路所有互相信任的應用系統。

單點登入機制:

CAS單點登入原理與實作(服務端用戶端搭建)

                                         上圖實作用Cookie進行驗證登入

2.實作方法

   2.1 CAS服務端

    準備工作tomcat一個更改端口号

CAS單點登入原理與實作(服務端用戶端搭建)

    解壓下載下傳的cas-server4.0.0服務端壓縮包,找到cas-server-4.0.0\modules\cas-server-webapp-4.0.0.war檔案解壓到tomcat中的webapps下然後可以配置取消HTTPS協定換成HTTP協定

    (1)打開cas-server\WEB_INF\deployerConfigContext.xml檔案,找到id是proxyAuthenticationHandler配置

CAS單點登入原理與實作(服務端用戶端搭建)

            在後面添加配置

CAS單點登入原理與實作(服務端用戶端搭建)

            将HTTPS協定換成HTTP協定。當然你不換也行,不過就需要證書了。

     (2)打開cas-server\WEB-INF\spring-configuration\ticketGrantingTicketCookieGenerator.xml檔案

找到id是ticketGrantingTicketCookieGenerator進行配置

CAS單點登入原理與實作(服務端用戶端搭建)

将true改成flase,即不開啟HTTPS驗證

    (3)打開cas-server\WEB-INF\spring-configuration\warnCookieGenerator.xml檔案,找到id是warnCookieGenerator

CAS單點登入原理與實作(服務端用戶端搭建)

将true改為flase,即不開啟HTTPS驗證。

服務端這就配置好了。

    (4)啟動tomcat運作CAS,通路localhost:8080/cas-server

CAS單點登入原理與實作(服務端用戶端搭建)

運作成功。下面該登入了。

4.0以上版本的登入使用者名密碼在deployerConfigContext.xml配置檔案中可以看到

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

使用者名casuser密碼Mellon

4.0以下版本使用者名跟密碼保持一緻就可以登入成功,如圖

CAS單點登入原理與實作(服務端用戶端搭建)

服務端就算搭建成功了。

2.2在服務端配置資料庫使用者名密碼,跟資料庫連接配接登入

    服務端配置成功,當然我們的單點登入要跟資料庫項目來關聯的。服務端隻配置跟資料庫連接配接就行了

    (1)修改deployerConfigContext.xml配置檔案

CAS單點登入原理與實作(服務端用戶端搭建)

将這塊注釋掉

CAS單點登入原理與實作(服務端用戶端搭建)

新增bean資料庫連接配接

CAS單點登入原理與實作(服務端用戶端搭建)

新增bean編寫登入sql語句

CAS單點登入原理與實作(服務端用戶端搭建)

另外需要将c3p0-0.9.1.2.jar包、mysql-connector-java-5.1.21.jar包和cas-server-support-jdbc-4.0.0.jar這三個jar導入到lib下。

在修改id為authenticationManager的bean

CAS單點登入原理與實作(服務端用戶端搭建)

紅框内注釋掉

CAS單點登入原理與實作(服務端用戶端搭建)

再次運作Tomcat,通路https://localhost:8443/cas/login就能進行資料庫驗證了。

用戶端配置

将下面這一段配置到你的項目中的web.xml檔案中就可以了

    <!--用于單點退出,該過濾器用于實作單點登出功能,可選配置 -->

    <context-param>

    <param-name>casServerLogoutUrl</param-name>

    <param-value>http://localhost:8083/cas-server-webapp-4.0.0/logout</param-value>

</context-param>

    <listener>

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

    </listener>

    <!--該過濾器用于實作單點登出功能,可選配置。 -->

    <filter>

        <filter-name>CASSingle Sign OutFilter</filter-name>

        <filter-class>org.jasig.cas.client.session.SingleSignOutFilter</filter-class>

    </filter>

    <filter-mapping>

        <filter-name>CASSingle Sign OutFilter</filter-name>

        <url-pattern>/*</url-pattern>

    </filter-mapping>

    <filter>

        <filter-name>CASFilter</filter-name>

        <filter-class>org.jasig.cas.client.authentication.AuthenticationFilter</filter-class>

        <init-param>

            <param-name>casServerLoginUrl</param-name>

            <param-value>http://localhost:8083/cas-server-webapp-4.0.0/login</param-value>  <!--服務端的位址-->

        </init-param>

        <init-param>

            <param-name>serverName</param-name>

            <param-value>http://localhost:8080</param-value>    <!--用戶端的位址-->

        </init-param>

    </filter>

    <filter-mapping>

        <filter-name>CASFilter</filter-name>

        <url-pattern>/*</url-pattern>

    </filter-mapping>

    <!--該過濾器負責對Ticket的校驗工作,必須啟用它 -->

    <filter>

        <filter-name>CASValidationFilter</filter-name>

        <filter-class>

            org.jasig.cas.client.validation.Cas20ProxyReceivingTicketValidationFilter

        </filter-class>

        <init-param>

            <param-name>casServerUrlPrefix</param-name>

            <param-value>http://localhost:8083/cas-server-webapp-4.0.0</param-value><!--服務端的位址-->

        </init-param>

        <init-param>

            <param-name>serverName</param-name>

            <param-value>http://localhost:8080</param-value> <!--用戶端的位址-->

        </init-param>

    </filter>

    <filter-mapping>

        <filter-name>CASValidationFilter</filter-name>

        <url-pattern>/*</url-pattern>

    </filter-mapping>

    <!-- 該過濾器負責實作HttpServletRequest請求的包裹, 比如允許開發者通過HttpServletRequest的getRemoteUser()方法獲得SSO登入使用者的登入名,可選配置。 -->

    <filter>

        <filter-name>CASHttpServletRequest WrapperFilter</filter-name>

        <filter-class>

            org.jasig.cas.client.util.HttpServletRequestWrapperFilter

        </filter-class>

    </filter>

    <filter-mapping>

        <filter-name>CASHttpServletRequest WrapperFilter</filter-name>

        <url-pattern>/*</url-pattern>

    </filter-mapping>

    <!-- 該過濾器使得開發者可以通過org.jasig.cas.client.util.AssertionHolder來擷取使用者的登入名。 比如AssertionHolder.getAssertion().getPrincipal().getName()。 -->

    <filter>

        <filter-name>CASAssertion Thread LocalFilter</filter-name>

        <filter-class>org.jasig.cas.client.util.AssertionThreadLocalFilter</filter-class>

    </filter>

    <filter-mapping>

        <filter-name>CASAssertion Thread LocalFilter</filter-name>

        <url-pattern>/*</url-pattern>

    </filter-mapping>

    <!-- ========================單點登入結束 ======================== -->

繼續閱讀