cas流程

參考連接:https://blog.csdn.net/qq_34021712/article/details/81318649     ©王賽超
      https://blog.csdn.net/u010475041/article/details/78094251html

大神超厲害,小菜鳥表示很崇拜java

casServer:https://mmoayyed.unicon.net:8443/cas/loginweb

casClient1:http://localhost:8080數據庫

casClient2:http://localhost:8082瀏覽器

協議流程:
1. 若業務系統未登陸,302到https://mmoayyed.unicon.net:8443/cas/login?service=http%3A%2F%2Fapp1.cas.com%3A8081%2F
2. 用戶提交用戶名密碼後,302到http://localhost:8080/?ticket=ST-14-pMSfaxuaq1tMmRccck4i9egxM4kDESKTOP-NEPM8G8
3. 業務系統驗證ticket,並獲取用戶數據https://mmoayyed.unicon.net:8443/cas/serviceValidate?service=p3/serviceValidate?service&ticket=ABC123
4. 成功獲取用戶數據

服務器

其實咱們只關心兩個階段,其餘都交給cas client去完成
1. 請求的路徑是否須要跳轉到登陸頁
2. 回來的用戶是否能訪問被請求資源java-web

 

客戶端:http://localhost:8080/session

    因爲該鏈接沒有service,因此重定向到登錄界面   app

 <filter>
        <!--ApplicationFilterConfig[name=CAS Filter, filterClass=org.jasig.cas.client.authentication.AuthenticationFilter]-->
        <filter-name>CAS Filter</filter-name>
        <filter-class>org.jasig.cas.client.authentication.AuthenticationFilter</filter-class>
        <init-param>
            <param-name>casServerLoginUrl</param-name>
            <param-value>https://mmoayyed.unicon.net:8443/cas/login</param-value>
            <!-- 使用的CAS-Server的登陸地址,必定是到登陸的action -->
            <!--https://cas.server.name:8443/cas/login?service=http%3A%2F%2Fapp1.cas.com%3A8081%2F-->
        </init-param>
        <init-param>
            <param-name>serverName</param-name>
            <param-value>http://localhost:8080/cas-sample-java-webapp</param-value>
            <!-- 當前Client系統的地址 -->
        </init-param>
    </filter>

此時登錄界面的地址路徑爲:https://mmoayyed.unicon.net:8443/cas/login?service=http%3A%2F%2Flocalhost%3A8080%2Fcas-sample-java-webapp%2Findex.jspwebapp

該圖示重定向以後的界面和路徑

cas server本來的登錄界面路徑爲:https://mmoayyed.unicon.net:8443/cas/login

截圖以下:

總結:兩者的區別就是用戶第一次訪問app時,去cas認證中心的過程,CAS Filter攔截器會查看url有無service,參考cas驗證流程

 

此時,輸入用戶名,密碼驗證經過

此時點擊登錄後會進入cas的認證系統,默認的用戶名密碼,此處已經改成從數據庫user表進行驗證,主要方法是extends AbstractPreAndPostProcessingAuthenticationHandler,這個類用於有多個屬性字段提交的狀況

驗證經過後,app所在界面進行跳轉,顯示用戶登錄成功

 

此時瀏覽器輸入 http://localhost:8082/cas-sample-java-webapp 訪問客戶端2

 

以下界面表示登錄成功。

查看cas server ;client1(8080端口);client2(8082)的JSESSIONID,爲流程走代碼做參考

能夠知道:登錄成功後, ticket保存在cas server服務器端,除此以外下面的問題說明cas會加在客戶端訪問url後面返回

     此時客戶端會向cas server提交ticket進行驗證, 

<filter>
        <filter-name>CAS Validation Filter</filter-name>
        <filter-class>org.jasig.cas.client.validation.Cas30ProxyReceivingTicketValidationFilter</filter-class>
        <init-param>
            <param-name>casServerUrlPrefix</param-name>
            <param-value>https://mmoayyed.unicon.net:8443/cas</param-value>
            <!-- 使用的CAS-Server的地址,必定是在瀏覽器輸入該地址能正常打開CAS-Server的根地址 -->
        </init-param>
        <init-param>
            <param-name>serverName</param-name>
            <param-value>http://localhost:8080/cas-sample-java-webapp</param-value>
            <!-- 當前Client系統的地址 -->
        </init-param>
    </filter>

 

org.jasig.cas.client.validation.Cas30ProxyReceivingTicketValidationFilter

public class Cas30ProxyReceivingTicketValidationFilter extends Cas20ProxyReceivingTicketValidationFilter {

    public Cas30ProxyReceivingTicketValidationFilter() {
        super(Protocol.CAS3);
        this.defaultServiceTicketValidatorClass = Cas30ServiceTicketValidator.class;
        this.defaultProxyTicketValidatorClass = Cas30ProxyTicketValidator.class;
    }
}

 

 

public class Cas30ServiceTicketValidator extends Cas20ServiceTicketValidator {

    public Cas30ServiceTicketValidator(String casServerUrlPrefix) {
        super(casServerUrlPrefix);
    }

    @Override
    protected String getUrlSuffix() {
        return "p3/serviceValidate";
    }
}

 

 

serviceValidate這個接口傳入ticket,service參數,驗證有效性
成功後,用戶信息寫入web應用的sessio裏。

至此,session會話創建結束。

 

 

下面是遇到的問題

NO1.在輸入用戶名,密碼提交後出現如下界面如:此時app訪問路徑爲 http://localhost:8080/?ticket=ST-14-pMSfaxuaq1tMmRccck4i9egxM4kDESKTOP-NEPM8G8

能夠看到此時咱們的用戶已經經過驗證,帶着屬於本身的憑據ticket返回----(這是沒有修復以前的問題截圖)

而用戶是否登錄呢?

能夠看到cas server的web界面已經進入到登錄成功的界面

 

在此基礎上,點擊退出以後,訪問http://localhost:8081/ 則會進入https://cas.server.name:8443/cas/login?service=http%3A%2F%2Fapp1.cas.com%3A8081%2F 從新驗證登錄

對於上面出顯得問題,作出的調整是:將主機名省去,改成默認的localhost,則訪問主機名的問題修復

No2.

 

這個問題的緣由在於:搭建cas server服務器的時候,第一步是證書的配置,參考 https://blog.csdn.net/yelllowcong/article/details/78778452

而個人cas server則用的不是本身建立的證書,我選擇的證書是官網下載下來的cas server壓縮包解壓後的cas-overlay-template-master\etc\cas\thekeystore證書,https://www.cnblogs.com/ljangle/p/10038214.html

那麼這個證書對於搭建客戶端的關鍵是什麼呢?

主要就是圖片圈出的,而我理解不透徹,就對本身啓動的cas server隨便起了一個域名,雖然cas server啓動了,可是在接入客戶端的時候就栽了跟頭。

那cas server自帶的證書是什麼樣呢?

就是這個下圖的內容,相應的,若是不想換證書,就把域名改一下,這樣dns才能夠在本地hosts文件找到對應的ip,不然就找不到。

到此並無結束,因爲我下載的cas server是6.0版本的,也就是隻支持jdk11,而個人客戶端項目是jdk1.8版本的,那麼這個證書爲何會讓二者有關聯呢?

就是證書導入jdk1.8中;介於我是一個小菜鳥,還不知道怎麼把證書加入到jdk11中,可是證書加入jdk1.8就是大把的教程,證書加入1.8底層原理不清楚,可是最終的目的就是讓客戶端在服務器驗證登錄的時候,能夠知道域名與ip之間的映射關係,注意客戶端的jdk要選擇證書嵌入的jdk,不然會出現unable to find valid certification path to requested target

至此,maven web 的客戶端與cas server的服務器驗證就完成了

歡迎指教,只懂java se的仙女表示我盡力了

 

有一個問題是個人登錄成功界面沒有;jsessionid=3EFAC76F253826DB83F73C8EC7432D10,估計哪裏沒有配置好,下次改

相關文章
相關標籤/搜索