cas單點登錄學習:cas服務端與客戶端的搭建


單點登錄:英文名稱(Single Sign On),簡稱sso,是目前比較流行的服務於企業業務整合的解決方案之一,SSO 使得在多個應用系統中,用戶只需要登錄一次就可以訪問所有相互信任的應用系統

 

然后,引用段話介紹一下cas特性(詳見http://www.360doc.com/content/15/0204/17/21706453_446251626.shtml):

1) 開源的、多協議的SSO解決方案,CAS ServerCAS Client通信支持多協議,如:CASOauthOpenIDSAML1.1SAML2.0D等。

2) 支持多種認證機制:Active Directory、JAASJDBCLDAPX.509 Certificates

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

4) 支持多種客戶端:Java.NetPHPPerlApache、 uPortal等。

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

6)  提供高可用性:通過把認證過的狀態數據存儲在TicketRegistry組件中,這些組件有很多支持分布式環境的實現

 

CAS包含CAS ServerCAS Client兩個部分。下面我們看一看他的運行原理,首先借用一張cas常用的基礎協議流程圖

大致流程是,在客戶機在在訪問cas客戶端時都需要請求服務端驚醒身份驗證,再驗證未通過是時,會被重定向至cas的服務端進行登陸,而后再次驗證,通過之后又重定向到客戶端界面。這里只是一些文字描述,真正的實現我們接下來看如何操作:

首先,我需要介紹一下,配置cas的服務端有兩種方式:一種是http方式,另一種是https方式。筆者這里將演示如何配置https方式的cas服務端。

第一步我們肯定是需要准備我們的原材料:筆者這里用的是cas-server-4.0.7.war,tomcat7

首先需要的是導出你的證書,使用jdk的keytool工具,命令如下:

 

keytool -genkey -alias castest -keyalg RSA -keystore C:/key/casKey.keystore

 

 這里是生成你的keystore文件,C:/key/casKey.keystore是指文件生成路徑,即c盤下的key文件夾下生成casKey.store文件,注意文件夾一定要存在這里你會輸入你的證書信息,注意口令為你的密碼,用戶名將為你后期配置服務端請求的域名

 

 

第二步導出crt文件:

keytool -export -file C:/key/casKey.crt -alias castest -keystore C:/key/casKey.keystore

 

執行完這兩步,你將生成兩個文件:

第三步:將生成的證書導入你的運行jdk中:

keytool -import -keystore "C:/Program Files/Java/jdk1.8.0_131/jre/lib/security/cacerts" -file C:/key/casKey.crt -alias castest

 

這里需要注意的是你的路徑一定要為你的jdk->jre->lib->security,如果你的路徑下存在此文件,則需要將其刪除,再執行導入,密鑰庫口令默認為changeit

然后將生成的證書文件文件拷貝至jdk->bin下,在c://windows/System32/drivers/etc/hosts文件中添加你的域名映射,沒有該文件需創建一個hosts文件,添加內容如下

127.0.0.1 sso.castest.com

 

 接下來就開始配置tomcat環境了,首先將你的cas-server-4.0.7.war拷貝至tomcat的webapps下,改名為cas.war。打開tomcat->conf->server.xml,找到如下內容:

將其反注釋,修改為:

<Connector port="8086" protocol="HTTP/1.1" SSLEnabled="true"
               maxThreads="150" scheme="https" secure="true"
               clientAuth="false" sslProtocol="TLS" keystoreFile="C:/key/casKey.keystore" keystorePass="casDemo" />

 

 這里需要注意:keystoreFile為你第一步生成的keystore文件的位置,keystorePass為你第一步輸入的口令密碼,不是changeit

接下來做個測試,啟動tomcat,輸入地址https://sso.castest.com:8086/cas/,出現如下界面

添加好信任之后,進入如下界面,則說明服務端配置成功:

ok,以上步驟如果沒有成功,請仔細檢查之前步驟。成功了之后,恭喜,那就可以進入客戶端端的配置了,首先,下載服務端架包,這里用的是cas-client-core-3.2.1.jar,然后准備一個測試tomcat,用來測試單點登錄,創建一個web項目,取名為casDemo001

pom.xml加入如下:

<dependency>
        <groupId>org.jasig.cas.client</groupId>
        <artifactId>cas-client-core</artifactId>
        <version>3.2.1</version>
    </dependency>
<!-- https://mvnrepository.com/artifact/commons-collections/commons-collections --> <dependency> <groupId>commons-collections</groupId> <artifactId>commons-collections</artifactId> <version>3.2.2</version> </dependency> <!-- https://mvnrepository.com/artifact/commons-logging/commons-logging --> <dependency> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> <version>1.2</version> </dependency> <!-- https://mvnrepository.com/artifact/javax.servlet/servlet-api --> <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>2.5</version> <scope>provided</scope> </dependency>

 

 web.xml文件如下:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4"
         xmlns="http://java.sun.com/xml/ns/j2ee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

  <!-- ======================== 單點登錄開始 ======================== -->
    <!-- 用於單點退出,該過濾器用於實現單點登出功能,可選配置-->
    <listener>
        <listener-class>org.jasig.cas.client.session.SingleSignOutHttpSessionListener</listener-class>
    </listener>

    <!-- 該過濾器用於實現單點登出功能,可選配置。 -->
    <filter>
        <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>
        <filter-name>CASFilter</filter-name>
        <filter-class>org.jasig.cas.client.authentication.AuthenticationFilter</filter-class>
        <init-param>
            <param-name>casServerLoginUrl</param-name>
            <param-value>https://sso.castest.com:8086/cas/login</param-value>
        </init-param>
        <!--
            指定客戶端的域名和端口,是指客戶端應用所在機器而不是 CAS Server 所在機器以下配置表示,
            系統部署在域名為shirui-55的機器上,端口為80 
        -->
        <init-param>
            <param-name>serverName</param-name>
            <param-value>http://localhost:8111</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>CASFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    <!-- 該過濾器負責對Ticket的校驗工作,必須啟用它 -->
    <filter>
        <filter-name>CAS Validation Filter</filter-name>
        <filter-class>
            org.jasig.cas.client.validation.Cas20ProxyReceivingTicketValidationFilter</filter-class>
        <init-param>
            <param-name>casServerUrlPrefix</param-name>
            <param-value>https://sso.castest.com:8086/cas</param-value>
        </init-param>
        <init-param>
            <param-name>serverName</param-name>
            <param-value>http://localhost:8111</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>CAS Validation Filter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    <!--
        該過濾器負責實現HttpServletRequest請求的包裹,
        比如允許開發者通過HttpServletRequest的getRemoteUser()方法獲得SSO登錄用戶的登錄名,可選配置。
    -->
    <filter>
        <filter-name>CAS HttpServletRequest Wrapper Filter</filter-name>
        <filter-class>
            org.jasig.cas.client.util.HttpServletRequestWrapperFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>CAS HttpServletRequest Wrapper Filter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    <!--
        該過濾器使得開發者可以通過org.jasig.cas.client.util.AssertionHolder來獲取用戶的登錄名。
        比如AssertionHolder.getAssertion().getPrincipal().getName()。
    -->
    <filter>
        <filter-name>CAS Assertion Thread Local Filter</filter-name>
        <filter-class>org.jasig.cas.client.util.AssertionThreadLocalFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>CAS Assertion Thread Local Filter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    
        
        <!-- ======================== 單點登錄結束 ======================== -->

        <!-- session超時定義,單位為分鍾 -->
        <session-config>
                <session-timeout>2</session-timeout>
        </session-config>

</web-app>
        

 

 這里需注意的是關於兩個casServer的url的編寫

啟動tomcat(需要修改端口號,要不然后報端口號被占用錯誤,這里修改為8111,當然你可以根據自己的愛好修改,對這里來說無關痛癢),將項目運行,啟動成功后輸入地址:localhost:8111/casDemo001/,出現如下界面

這就證明配置成功了,你的請求已經被攔截,並且正確的跳到了你的cas服務器登錄界面,輸入賬號密碼:casuser     Mellon(這是cas默認的登錄賬戶,配置數據驗證的話下一篇博文會講述),登陸后出現如下界面:

 

 

 

 

然后刷新cas服務端的界面,出現如下圖界面:

 

至此,cas服務端與客戶端的配置已經完成,服務端文件下載鏈接鏈接:https://pan.baidu.com/s/1qY1H0aK    密碼:7e52


免責聲明!

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



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