CAS FOR WINDOW ACTIVE DIRECTORY SSO單點登錄


一、CAS是什么?

  CAS(Central Authentication Service)是 Yale 大學發起的一個企業級的、開源的項目,旨在為 Web 應用系統提供一種可靠的單點登錄解決方法(支持WEB及客戶端)。

CAS 開始於 2001 年, 並在 2004 年 12 月正式成為 JA-SIG 的一個項目。

二、主要特性

   1、開源的、多協議的 SSO 解決方案; Protocols : Custom Protocol 、 CAS 、 OAuth 、 OpenID 、 RESTful API 、 SAML1.1 、 SAML2.0 等。

   2、支持多種認證機制: Active Directory 、 JAAS 、 JDBC 、 LDAP 、 X.509 Certificates等;

   3、安全策略:使用票據( Ticket )來實現支持的認證協議;

   4、支持授權:可以決定哪些服務可以請求和驗證服務票據( Service Ticket );

   5、提供高可用性:通過把認證過的狀態數據存儲在 TicketRegistry 組件中,這些組件有很多支持分布式環境的實現,                   如: BerkleyDB 、 Default 、 EhcacheTicketRegistry 、 JDBCTicketRegistry 、 JBOSS TreeCache 、 JpaTicketRegistry 、 MemcacheTicketRegistry 等;

     6、支持多種客戶端: Java 、 .Net 、 PHP 、 Perl 、 Apache, uPortal 等。

三、CAS原理

  關於原理網上已有很多資料。如:http://www.cnblogs.com/shanyou/archive/2009/07/14/1523671.html

本次博文主要講解CAS如何與WINDOWS的ACTIVE DIRECTORY進行結合。因為網上大部分的資料都是與LDAP整合,而ACTIVE DIRECTORY也是基於LDAP協議的。

  1、運行環境:

    window 8.1 + tomcat 8.0.30 + JDK 1.8 + CAS SERVER 4.0 +CAS Java Client + CAS .NET Client(包含example)

  2、部署:

    • 將tomcat復制為三份,分別為tomcat-cas,tomcat-app1,tomcat-app2

    (本次tomcat-server沒用使用https的方式,如何將https修改成http請自行網上搜索。另https的配置需要證書,通過java的keytools工具進行生成或購買的證書。)

    • 修改各tomcat端口號(tomcat-cas保持原始端口號)

      tomcat-app1:

      

     

    

    tomcat-app2:

    

    • 將Cas Server 4.0 RELEASE解壓,在module中cas-server-webapp.war復制到tomcat-server webapps目錄下。

    

    • 建立Java Web工程,將Cas Java Client工程引用(當然可以通過Maven的方式)。

    

    • 配置Cas Client web.xml

    

 <!-- ========================單點登錄開始 ======================== -->
    <!--用於單點退出,該過濾器用於實現單點登出功能,可選配置 -->
    <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:8080/cas/login</param-value>
        </init-param>
        <init-param>
            <param-name>serverName</param-name>
            <param-value>http://localhost:8081</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:8080/cas</param-value>
        </init-param>
        <init-param>
            <param-name>serverName</param-name>
            <param-value>http://localhost:8081</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>
    <!-- ========================單點登錄結束 ======================== -->

 

 

 

    • 發布Cas Java Client到tomcat-app1和tomcat-app2

     

    • 配置cas-server(可根據官網進行配置)

         找到cas-server下deployerConfigContext.xml。

       

 

其中LADP相對應的配置值是通過cas.properties進行配置

配置已結束。此次配置中用戶登錄主要是通過AD中的UPN進行匹配登錄。

 

    • 運行各tomcat(通過tomcat下bin目錄下startup命令,window是startup.bat。 linux或mac下使用startup.sh)
    • Cas .NET Client配置(ExampleWebSite工程下web.config)

    • 運行測試

.NET Client運行未登錄

 

 

點擊登錄會自動跳轉到cas-server登錄頁,進行登錄:

登錄后會自動跳轉到.NET CLIENT客戶端,在客戶端上並顯示當前登錄的信息。

直接訪問tomcat-app1和tomcat-app2,會自動登錄並獲取到當前的登錄用戶。

 

點擊任一系統中的注銷(http://localhost:8080/cas/logout):

 再訪問.Net Client,登錄系統會自動被注銷

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM