22 CAS實現單點登入體驗

isongoo發表於2010-02-01

0. 文件介紹 ... 2

0.1 文件目的 ... 2

0.2 文件範圍 ... 2

0.3 讀者物件 ... 2

0.4 參考文獻 ... 2

0.5 術語與縮寫解釋 ... 2

1.     概述 ... 3

1.1 背景 ... 3

1.2 環境 ... 3

1.3 下載資源 ... 3

2. 配置 CAS SERVER .. 4

2.1 簡單配置 ... 4

2.2 資料庫驗證配置 ... 5

2.3 引數配置 ... 8

2.4HTTPS 驗證配置 ... 10

2.5 自定義頁面 ... 14

3. 配置 JAVA CLIENT . 17

3.1HTTPS 驗證 ... 17

3.2HTTP 驗證 ... 19

4. 配置 DOTNET CLIENT . 20

5. 配置 PHP CLIENT . 24

6. 如何實現單點登出 ... 24


22 CAS實現單點登入體驗 22 CAS實現單點登入體驗 22 CAS實現單點登入體驗 22 CAS實現單點登入體驗 0.
文件介紹

22 CAS實現單點登入體驗 22 CAS實現單點登入體驗 22 CAS實現單點登入體驗 22 CAS實現單點登入體驗 22 CAS實現單點登入體驗 0.1 文件目的

記錄使用 CAS 實現 SSO 的過程。

22 CAS實現單點登入體驗 22 CAS實現單點登入體驗 22 CAS實現單點登入體驗 22 CAS實現單點登入體驗 22 CAS實現單點登入體驗 0.2 文件範圍

    使用 CAS 實現 SSO 的過程

22 CAS實現單點登入體驗 22 CAS實現單點登入體驗 22 CAS實現單點登入體驗 22 CAS實現單點登入體驗 22 CAS實現單點登入體驗 0.3 讀者物件

    任何有興趣的傢伙。

22 CAS實現單點登入體驗 22 CAS實現單點登入體驗 22 CAS實現單點登入體驗 22 CAS實現單點登入體驗 22 CAS實現單點登入體驗 0.4 參考文獻

提示: 列出本文件的所有參考文獻(可以是非正式出版物),格式如下:

[ 識別符號] 作者,文獻名稱,出版單位(或歸屬單位),日期

 

大部分都是網路上查詢的資料,很多,不列舉了。

 

22 CAS實現單點登入體驗 22 CAS實現單點登入體驗 22 CAS實現單點登入體驗 22 CAS實現單點登入體驗 22 CAS實現單點登入體驗 0.5 術語與縮寫解釋

縮寫、術語

SSO

Single sign on/off ,單點登入 / 退出

CAS

全稱 JA-SIG Central Authentication Service ,實現 SSO 的開源專案

 

 

 

 

 

 

 

22 CAS實現單點登入體驗 1.       概述

22 CAS實現單點登入體驗 1.1 背景

       單點登入是必須的,實現方式頗多,這裡就說使用 CAS 的實現方式。使用 CAS 實現 SSO ,網路上說明很多,大部分都是從製作證照開始,而實際上是可以不使用 HTTPS 驗證,這樣更方便。

       單點登入的原理是透過攔截 你設定的 URL ,並跳轉到 你指定的 CAS SERVER 登入頁,當你登入成功後,帶著 TICKET ,返回到 你開啟的 URL 。然後你就可以一票在手,暢通無阻。

       網上有個傢伙用旅遊的套票來解釋單點登入,非常形象。當你到達一個旅遊區門口,你可以買一個套票,套票規定你可以遊覽 N 個景點,進入這些景點的時候,你不需要再買票,也就實現了單點登入。

       同時,也可以借用這個比喻說明一下單點登出。當你開啟一個應用 A 時,單擊了登出按鈕,跳轉到 或者 ,系統顯示登出成功。此時, IE 視窗沒有關閉,你繼續開啟應用 A ,仍然沒有登出成功,不需要登入。這就相當於你已經在旅遊景點內,即使你把套票撕毀了,你仍然可以繼續參觀這個景點,不會把你驅逐出去。但是,你再也進不了其它的景點了。

       那麼怎麼實現立即生效的登出呢?或者這種方式是否就滿足我們的需求呢?

22 CAS實現單點登入體驗 1.2 環境

       Windows XP JDK1.6.03 Tomcat6.0.20

注意:配置好環境變數。

22 CAS實現單點登入體驗1.3 下載資源

伺服器端:

當前最新版本是 3.3.4 ,測試安裝的版本為 3.3.3

客戶端:

                     JAVA 支援單點登入

                  JAVA 支援單點登出

       dotnet-client                                 DOTNET 支援類

       phpcas                                        PHP 支援

      

注意:同時要下載原始碼,部分功能需要修改原始碼,重新做包。

22 CAS實現單點登入體驗 2. 配置 CAS SERVER

CAS SERVER 目錄介紹。

22 CAS實現單點登入體驗2.1 簡單配置

       把你下載 cas-server 解壓,進入 cas-server-3.3\modules ,複製 cas-server-webapp-3.3.war tomcat\webapps 下,修改名稱為 cas.war ,方便使用,原來的名字太長了。然後啟動 IE ,輸入 檢驗是否可以訪問,如果可以,則輸入相同的使用者名稱和密碼,比如 cas/cas ,測試是否能登入。

       如果你對安全性要求不高且急不可待,這個時候就可以直接進行 CAS CLIENT 的配置。

 

22 CAS實現單點登入體驗 2.2 資料庫驗證配置

       簡單配置後,可以使用相同的使用者名稱和密碼,進行登入。這個不實際,可以透過配置實現連線自己的資料庫進行配置。這裡有個前提,就是所有系統需要使用相同的使用者表和密碼加密方法,可以使用 CAS 自帶的加密方法( \org\jasig\cas\authentication\handler\ DefaultPasswordEncoder.class )或自己用 JAVA 寫的加密方法。

       進入目錄 tomcat\webapps\cas\WEB-INF ,開啟檔案 deployerConfigContext.xml ,找到類似下面的程式碼:

注意 cas-server 根據版本不同 檔案的路徑或 BEAN 位置可能不同 逐個資料夾找下。

 

 

這是預設的方法。同時還有兩種可選,如下:

             

             

             

/************************************************************************/

                        abstract="false" lazy-init="default" autowire="default" dependency-check="default">

                           

                       

                       

                       

                       

                       

以上兩種方式都經過測試。另外,也可以寫出自己的方法驗證,修改 BEAN CLASS 屬性即可。如果沒有密碼沒有加密,則可以把引數 去掉。

 

下面針對最下面的方法進行說明。

       看它的屬性,還需要定義兩個 BEAN ,資料來源和加密,如下:

      

      

                    

                    

                    

                    

           

      --&gt  

<!--ORACLE à    

      

             

             

             

 

             

             

             

                   

       

 

   加密 à

       

        class="org.jasig.cas.authentication.handler.DefaultPasswordEncoder" autowire="byName">      

         

由於 CAS-SERVER.WAR 預設沒有采用資料庫加密,所以部分 JAR 包,沒有引入,下面這些需要複製到 webapps\cas\WEB-INF\lib 裡面:

Cas-server-support-jdbc-3.3.3.jar

Cas-server-support-ldap-3.3.3.jar

Commons-dbcp.jar

Commons-pool.jar

Org.springframework.jdbc-3.0.0.M4.jar         //spring 要根據自己的版本選擇

Org.springframework.transaction-3.0.0.M4.jar

Sqljdbc.jar                                                              // 資料庫連線 JAR ,根據自己的複製

Oraclejdbc.jar

完成以後,使用者表資料準備好後,可以執行 進行登入測試。這個時候很容易出現錯誤,多數是因為 JAR 包問題,注意檢視 tomcat\logs 日誌檔案,進行檢查,問題很容易解決。

22 CAS實現單點登入體驗2.3 引數配置

       這裡只說明一下我涉及到的引數,可能有更多引數,目前還沒有用到。

       1 tomcat\webapps\cas\WEB-INF\ deployerConfigContext.xml

                                   p:httpClient-ref="httpClient"/>

       增加引數 p:requireSecure="false" ,是否需要安全驗證,即 HTTPS false 為不採用,加上去之後如下:

                                   p:httpClient-ref="httpClient"   p:requireSecure="false"/>

 

       2 Tomcat 6.0\webapps\cas\WEB-INF\spring-configuration\

ticketGrantingTicketCookieGenerator.xml

              p:cookieSecure="true"

              p:cookieMaxAge="-1"

              p:cookieName="CASTGC"

              p:cookiePath="/cas" />

引數 p:cookieSecure="true" ,同理為 HTTPS 驗證相關, TRUE 為採用 HTTPS 驗證,與 deployerConfigContext.xml 的引數保持一致。

引數 p:cookieMaxAge="-1" ,簡單說是 COOKIE 的最大生命週期, -1 為無生命週期,即只在當前開啟的 IE 視窗有效, IE 關閉或重新開啟其它視窗,仍會要求驗證。可以根據需要修改為大於 0 的數字,比如 3600 等,意思是在 3600 秒內,開啟任意 IE 視窗,都不需要驗證。

 

warnCookieGenerator.xml

              p:cookieSecure="true"

              p:cookieMaxAge="-1"

              p:cookieName="CASPRIVACY"

              p:cookiePath="/cas" />

兩個引數與上面同理。

 

3 TICKET 的生命週期也可以在 web.xml 加這個引數實現:

<!-- Timeout for granting tickets --&gt

   

        edu.yale.its.tp.cas.grantingTimeout

        7200

   

22 CAS實現單點登入體驗2.4HTTPS 驗證配置

       證照的製作使用 keytool 工具,進入 CMD ,輸入 keytool ,回車測試,如果出現幫助,則說明環境變數配置正確,如果沒有,則配置 PATH ,加入 %JAVA_HOME%\BIN

下面開始製作,先找好存放證照的位置:

(1)        keytool -genkey -alias tomcatcas -keystore tomcatcas -keyalg RSA -validity 3666

這一步是製作金鑰庫。

注意:名字與姓氏要輸入主機名或域名或 localhost ,不能隨意輸入。密碼為自己設定。下面的密碼直接回車。

2 keytool -export -alias tomcatcas -keystore tomcatcas -file tomcatcas.crt

       這一步是把金鑰庫匯出為證照檔案。

注意:密碼為上一步設定的密碼。

 

3 keytool -import -alias tomcatcas -file tomcatcas.crt

-keystore %JAVA_HOME%/jre/lib/security/cacerts

         這一步是把證照匯入 TOMCAT

後面的路徑為 TOMCAT 使用的 JRE 路徑, JDK1.6 安裝有兩個目錄 JDK1.6 JRE1.6 TOMCAT6.0 只要 JRE1.6 即可,通常在安裝時,也都是預設到 JRE1.6 ,這時要輸入 %JRE_HOME%\lib\security\cacerts ,這個地方必須要確認準確。

         注意:這裡需要輸入密碼,此密碼不是前面設定的密碼,是系統預設的密碼 changeit

 

4 )配置 tomcat6.0\conf\server.xml

<!--

               maxThreads="150" scheme="https" secure="true"

               clientAuth="false" sslProtocol="TLS"

               />

à

加入金鑰庫檔案和密碼(前面設定的密碼),修改為

               maxThreads="150" scheme="https" secure="true"

               clientAuth="false" sslProtocol="TLS"

               keystoreFile="d:\data\tomcatcas.keystore"

               keystorePass="123456"

               />

注意:金鑰庫檔案的要放到安全的位置,不能被隨意移動。

完成後,可重啟 TOMCAT ,進行測試。

22 CAS實現單點登入體驗2.5 自定義頁面                  

       CAS 頁面檔案放在 Tomcat 6.0\webapps\cas\WEB-INF\view\jsp 中,頁面配置檔案在 Tomcat 6.0\webapps\cas\WEB-INF\classes 中,比如 default_views.properties ,在這裡指定登入用哪個頁面,登出用哪個頁面等等。

Tomcat 6.0\webapps\cas\WEB-INF\cas.properties 檔案指定使用哪個皮膚頁面。

       下面開始操作:

       1 、進入 Tomcat 6.0\webapps\cas\WEB-INF\view\jsp ,複製 default 資料夾,並改名,再複製回來,如 myth

       2 、進入 Tomcat 6.0\webapps\cas\WEB-INF\classes ,複製 default_views.properties ,並改名再複製回來,如 myth_views.properties 。開啟檔案,把裡面的目錄 ..\jsp\default\ui 修改為自己的路徑,如 ..\jsp\myth\ui

       3 、進入 Tomcat 6.0\webapps\cas\WEB-INF ,開啟 cas.properties 檔案,修改

cas.viewResolver.basename=myth_views

完成以上 3 步後 開啟 IE 進入 進行測試 如果成功則進行下一步

注意:檔案中 logout 使用的類。

4 、修改頁面樣式

 

 

最後一點說明, Tomcat 6.0\webapps\cas\WEB-INF\cas-server.xml 中,有個 BEAN

      

              p:order="0">

             

                    

                            ${cas.viewResolver.basename}

                            protocol_views

                    

             

      

這個不要修改 否則出現 http code 500 for url

22 CAS實現單點登入體驗 3. 配置 JAVA CLIENT

22 CAS實現單點登入體驗 3.1HTTPS 驗證

       1 、把 casclient.jar cas-client-3.1.8.jar 複製到你的 jsp 工程的 WEB-INF\lib 裡;

       2 、修改 web.xml ,增加下面的程式碼:

<!-- 用於單點退出 --&gt

  org.jasig.cas.client.session.SingleSignOutHttpSessionListener

    CAS Single Sign Out Filter

    org.jasig.cas.client.session.SingleSignOutFilter

<!-- 用於單點登入 --&gt

CAS Filter

edu.yale.its.tp.cas.client.filter.CASFilter

下面兩個為驗證地址,即 cas server 的地址,如果使用 https 驗證,地址為 字樣 - ->

   

      edu.yale.its.tp.cas.client.filter.loginUrl

      

   

   

       edu.yale.its.tp.cas.client.filter.validateUrl

      

本工程的 URL ,被攔截的地址 - ->

   

       edu.yale.its.tp.cas.client.filter.serverName

       localhost:8080

   

 

    CAS Single Sign Out Filter

    /*

 

    CAS Filter

    /*

       3 、在頁面獲得驗證返回的使用者

使用者可以透過以下方式,從 JSP servlet 中獲取透過認證的使用者名稱:

String username = (String)session.getAttribute(edu.yale.its.tp.cas.client.filter.CASFilter.CAS_FILTER_USER);

 

獲得更完整的受認證使用者資訊物件 CASReceipt Java Bean ,可以使用以下語句:

CASReceipt  receipt = (CASReceipt )session.getAttribute(edu.yale.its.tp.cas.client.filter.CASFilter.CAS_FILTER_RECEIPT);

 

      

       完成以上後,進行測試。出現錯誤時,請檢視 tomcat\logs 檔案解決。

22 CAS實現單點登入體驗3.2HTTP 驗證

       1 、修改 casclient.jar 中檔案,如圖:

      

       2 、重新做 jar 包,複製到工程目錄

      

       完成後,做好測試。登入成功後的樣子,如下圖:

22 CAS實現單點登入體驗 4. 配置 DOTNET CLIENT

       1 、把 DotNetCasClient.cs 複製到 DotNet 專案

 

 

       2 、新建 loginPage.aspx Page_Load 加入程式碼

DotNetCASClient.DotNetCASClientServiceValidate client = new DotNetCASClient.DotNetCASClientServiceValidate();

            String userId = client.Authenticate(Request, Response, false);

            if (userId.Equals("failed"))

            {

                //Handle the auth failure...

            }

            else

            {

                Session[DotNetCASClient.SessionHandle.getUserSession()] = userId;

                FormsAuthentication.RedirectFromLoginPage(userId, false);

            }

注意: FormsAuthentication.RedirectFromLoginPage 這個方法。

      

 

       3 、在 Default.aspx Page_Load 內加入獲得使用者的程式碼:

       4 、修改 web.config 檔案

        

                                                                 

        

 

   

                  

                           

                  

                  

                           

                  

        

      

      

       完成後,執行測試,效果如下圖:

Cas 為使用者名稱。

22 CAS實現單點登入體驗 5. 配置 PHP CLIENT

22 CAS實現單點登入體驗 6. 如何實現單點登出

 

 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/725190/viewspace-626592/,如需轉載,請註明出處,否則將追究法律責任。

相關文章