SSO單點登錄教程(九)CAS-搭建CAS Client客戶端

作者:藍雄威,叩丁狼教育高級講師。原創文章,轉載請注明出處。

一、前言

目前為止我們已經搭建好了CAS Server端,我們需要來搭建客戶端配合使用,完成單點登錄和單點注銷的功能.我們將講兩種方式來搭建CAS Client端.一種是普通項目搭建,另一種是基于SpringBoot的項目搭建.

二、普通項目搭建CAS Client

官方提供了一個簡易的模板來搭建CAS Client.
Github地址:https://github.com/cas-projects/cas-sample-java-webapp
下載導入項目之后,我們只需要稍作修改,運行起來就可以使用了.
步驟:
1.下載之后導入到工具中,導入之后項目結構如下圖:

項目結構

2.項目默認使用的jetty的啟動插件.如果使用tomcat的插件,需要在pom.xml中把jetty配置去掉,添加tomcat的插件.

<plugin>
          <groupId>org.apache.tomcat.maven</groupId>
          <artifactId>tomcat7-maven-plugin</artifactId>
          <version>2.2</version>
          <configuration>
               <port>8088</port>
                <path>/</path>
          </configuration>
</plugin>

3.修改web.xml,把里面所有的``casServerUrlPrefix對應的value值換成你統一認證中心的域名,把所有serverName對應的value值換成你當前項目的域名.下方配置也標記了什么地方需要修改.
一定得改對,否則在訪問的時候會出現票根'ST-1-SSAyf0nFMvmVBvEBSXyg-cas'不符合目標服務的錯誤.

<?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">

<!--
   <context-param>
       <param-name>renew</param-name>
       <param-value>true</param-value>
   </context-param>
-->

    <filter>
        <filter-name>CAS Single Sign Out Filter</filter-name>
        <filter-class>org.jasig.cas.client.session.SingleSignOutFilter</filter-class>
        <init-param>
            <param-name>casServerUrlPrefix</param-name>
            <!--此處需要修改-->
            <param-value>https://www.sso.com:8443/cas</param-value>
        </init-param>
    </filter>

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

    <filter>
        <filter-name>CAS Authentication Filter</filter-name>
        <!--<filter-class>org.jasig.cas.client.authentication.Saml11AuthenticationFilter</filter-class>-->
        <filter-class>org.jasig.cas.client.authentication.AuthenticationFilter</filter-class>
        <init-param>
            <param-name>casServerLoginUrl</param-name>
            <!--此處需要修改-->
            <param-value>https://www.sso.com:8443/cas/login</param-value>
        </init-param>
        <init-param>
            <param-name>serverName</param-name>
            <!--此處需要修改-->
            <param-value>http://www.crm.com:8088</param-value>
        </init-param>
    </filter>

    <filter>
        <filter-name>CAS Validation Filter</filter-name>
        <!--<filter-class>org.jasig.cas.client.validation.Saml11TicketValidationFilter</filter-class>-->
        <filter-class>org.jasig.cas.client.validation.Cas30ProxyReceivingTicketValidationFilter</filter-class>
        <init-param>
            <param-name>casServerUrlPrefix</param-name>
            <!--此處需要修改-->
            <param-value>https://www.sso.com:8443/cas</param-value>
        </init-param>
        <init-param>
            <param-name>serverName</param-name>
            <!--此處需要修改-->
            <param-value>http://www.crm.com:8088</param-value>
        </init-param>
        <init-param>
            <param-name>redirectAfterValidation</param-name>
            <param-value>true</param-value>
        </init-param>
        <init-param>
            <param-name>useSession</param-name>
            <param-value>true</param-value>
        </init-param>
        <!--
        <init-param>
            <param-name>acceptAnyProxy</param-name>
            <param-value>true</param-value>
        </init-param>
        <init-param>
            <param-name>proxyReceptorUrl</param-name>
            <param-value>/sample/proxyUrl</param-value>
        </init-param>
        <init-param>
            <param-name>proxyCallbackUrl</param-name>
            <param-value>https://mmoayyed.unicon.net:9443/sample/proxyUrl</param-value>
        </init-param>
        -->
        <init-param>
            <param-name>authn_method</param-name>
            <param-value>mfa-duo</param-value>
        </init-param>
    </filter>

    <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 Single Sign Out Filter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    <filter-mapping>
        <filter-name>CAS Validation Filter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    <filter-mapping>
        <filter-name>CAS Authentication Filter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    <filter-mapping>
        <filter-name>CAS HttpServletRequest Wrapper Filter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    <welcome-file-list>
        <welcome-file>
            index.jsp
        </welcome-file>
    </welcome-file-list>
</web-app>

三、測試

運行tomcat7:run命令,把客戶端啟動起來.瀏覽器輸入http://www.crm.com:8088/index.jsp,此時頁面會跳轉到統一認證中心的登陸頁面.
但是會看到如下的錯誤信息:未認證授權的服務,
這是因為CAS Server端默認只接收https的客戶端請求,如果想讓CAS Server支持http協議的客戶端請求,需要在服務端添加一些配置.

未認證授權的服務

服務端修改如下:
操作步驟(1)
1.1 拷貝overlays/org.apereo.cas.cas-server-webapp-tomcat-5.2.3/WEB-INF/classes/services/HTTPSandIMAPS-10000001.json文件到/src/main/resources/services目錄.
1.2 修改services\HTTPSandIMAPS-10000001.json文件
"serviceId" : "^(https|imaps)://."
改為==>
"serviceId" : "^(https|http|imaps)://.
",

操作步驟(2): 在application.properties文件中添加:
cas.tgc.secure=false
cas.serviceRegistry.initFromJson=true

配置好之后,重新啟動客戶端和服務端.登陸之后會自動跳轉到客戶端的首頁.看到如下這張圖說明CAS Server端和CAS Client端已經整合成功.


四、單點注銷

CAS框架已經集成了單點注銷的功能,只需要統一認證中心注銷之后,所有的子系統都統一的注銷了.
啟動兩個客戶端,端口分別為8088,8089,在訪問的時候只需要訪問一次即可.
當統一認證中心注銷的時候,所有的子系統都統統注銷了.
這需要在客戶端中的退出按鈕,指向統一認證中心的注銷方法即可

<a >注銷</a>

當我們訪問完這個方法之后,所有的子系統會自動的注銷.
1.默認請求訪問統一認證中心的logout方法后,響應的是統一認證中心的注銷頁面.
2.如果我們希望注銷之后,能回到子系統中的某個頁面,此時可以在地址欄后面添加service的參數,統一認證中心會在注銷之后,會重定向到http://www.crm.com:8088/index.jsp這個地址.這個需要在服務端配置一個參數:
cas.logout.followServiceRedirects=true

五、基于SpringBoot的客戶端集成CAS

SpringBoot相關的知識.
叩丁狼教育-Springboot高級實戰課(第一期)
叩丁狼教育-Springboot高級實戰課(第二期)
我們要在SpringBoot的環境下使用CAS的功能,首先需要想到的是有沒有對應的starter可以幫我們快速構建.我們使用使用了cas-client-autoconfig-support項目的集成能力.Github地址:
https://github.com/Unicon/cas-client-autoconfig-support
步驟:
1.在SpringBoot應用的Maven配置文件(pom.xml)中添加依賴:

<dependency>
  <groupId>net.unicon.cas</groupId>
  <artifactId>cas-client-autoconfig-support</artifactId>
  <version>1.5.0-GA</version>
</dependency>

2.在應用啟動入口類上添加配置@EnableCasClient,示例:

@SpringBootApplication
@EnableCasClient
public class CrmApplication{ .. }

3.在應用的配置文件中(application.properties)添加如下配置:

# 項目端口
server.port=8088
# 填CAS服務器的前綴
cas.server-url-prefix=https://www.sso.com:8443/cas
# 填CAS服務器的登錄地址
cas.server-login-url=https://www.sso.com:8443/cas/login
# 填客戶端的訪問前綴 www.crm.com是在host文件中配置的映射,映射到127.0.0.1
cas.client-host-url=http://www.crm.com:8088

啟動項目即可,這樣SpringBoot就和CAS集成完成了.

WechatIMG9.jpeg
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容