CAS FOR WINDOW ACTIVE DIRECTORY SSO單點登陸

1、CAS是什麼?html

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

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

2、主要特性web

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

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

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

   四、支持受權:能夠決定哪些服務能夠請求和驗證服務票據( Service Ticket );app

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

     六、支持多種客戶端: Java 、 .Net 、 PHP 、 Perl 、 Apache, uPortal 等。分佈式

3、CAS原理

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

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

  一、運行環境:

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

  二、部署:

    • 將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,登陸系統會自動被註銷

相關文章
相關標籤/搜索