摘要:是大學發起的一個企業級的開源的項目,旨在為應用系統提供一種可靠的單點登錄解決方法屬于。實現原理是先通過的認證,然后向申請一個針對于的,之后在訪問時把申請到的針對于的以參數傳遞過去。后面的流程與上述流程步驟及以后步驟類似
CAS( Central Authentication Service )是 Yale 大學發起的一個企業級的、開源的項目,旨在為 Web 應用系統提供一種可靠的單點登錄解決方法(屬于 Web SSO )。
其流程用時序圖描述如下:
請求app地址http://www.app.com
app端(cas client)AuthenticationFilter中校驗session中_const_cas_assertion_,不為空,直接放過url;否則獲取request中的ticket參數,request中無ticket,302重定向到cas server地址,url中帶上service參數http://www.casserver.com/?ser...://www.app.com
cas server先判斷context中是否有service對應的TGT
判斷沒有TGT,返回login form(客戶端跳轉至cas server登錄頁地址)
用戶輸入登錄信息,form提交至cas server
cas server驗證登錄信息,生成TGT和ST
設置TGC至cookie,url中顯式帶上ticket(STid)參數,重定向Browser至App
App中AbstractTicketValidationFilter 會向cas server請求校驗ticket,帶上ticket(STid)和service(回調地址)參數
cas server通過ServiceValidateController校驗ticket
確認有效后返回校驗成功
此時App中會根據成功結果,在session中設置_const_cas_assertion_屬性
重定向到app,此時url中不帶有ticket參數
這時再經過AuthenticationFilter時,session中有_const_cas_assertion_屬性,放行;再經過AbstractTicketValidationFilter時,request中沒有ticket參數,放行,訪問目標資源
返回目標資源給browser
要點如下:
如若第4步中,判斷結果為有service對應的TGT,先驗證ticket(TGTid)、service是否合法,再根據renew參數看是否要重新創建service ticket,若要重新創建,則需要重新登錄;否則重新轉向service地址
如若app端想使用自己的自定義登錄界面,可以在第4步中不跳轉cas server的登錄頁地址,轉而跳轉至自定義登錄頁面。但需要向cas server端請求login ticket,在用戶填寫登錄表單后,連同login ticket一同傳參至cas server去做校驗
第6步中,TGT和ST的生成規則(這里指TGTid和STid的生成規則,TGT和ST均為類):"TGT_XX_RandomStr" "ST_XXX_RandomStr"。XX、XXX為AtomicLong.getAndIncrement()方法自增Long類型數字(最大值時,調用AtomicLong.compareAndSet()方法置0);RandomStr為隨機字符串
步驟12中再已校驗完用戶信息的情況下,再次進行重定向的目的,是為了隱藏第7步重定向時url中的ticket入參
單點登錄的目的,是讓用戶登錄App1后,如有權限,可免登錄,直接訪問App2、App3等。cas的實現方式,是在訪問其他App時,使用Cas Proxy。實現原理是App1先通過Cas Server的認證,然后向Cas Server申請一個針對于App2的proxy ticket,之后在訪問App2時把申請到的針對于App2的proxy ticket以參數ticket傳遞過去。后面的流程與上述cas流程步驟8及以后步驟類似
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/69276.html
摘要:上一篇文章簡單介紹了在本地開發環境中搭建服務端和客戶端,對單點登錄過程有了一個直觀的認識之后,本篇將探討單點登錄的實現原理。因此引入服務端作為用戶信息鑒別和傳遞中介,達到單點登錄的效果。為該流程的實現類。表示對返回結果的處理。 上一篇文章簡單介紹了 CAS 5.2.2 在本地開發環境中搭建服務端和客戶端,對單點登錄過程有了一個直觀的認識之后,本篇將探討 CAS 單點登錄的實現原理。 一...
CAS Compare And Swap.比較并交換.java中的同步器就是基于CAS技術實現的,為什么它能保證操作的同步性呢?因為是原子操作的一種,所以可以在多線程環境下來實現數據的交換操作不被打斷. CAS的缺陷ABA問題: 第一個線程來讀取變量A時被掛起;第二個線程過來操作A,將A賦值為B之后,并重新賦值為A;線程二完成操作;此時,對于線程一來說,所看到變量A的值是沒有變化的,但是實際上變...
摘要:最終依舊使用來更新值。此時使用能更好地提升性能。適用于高并發情況下的計數操作,利用與相似的原理,以空間換時間,提高了實際的計數效率。 AtomicLong /** * Atomically increments by one the current value. * * @return the updated value */ public final long increme...
摘要:原理剖析第篇工作原理分析一大致介紹關于多線程競爭鎖方面,大家都知道有個和,也正是這兩個東西才引申出了大量的線程安全類,鎖類等功能而隨著現在的硬件廠商越來越高級,在硬件層面提供大量并發原語給我們層面的開發帶來了莫大的利好本章節就和大家分享分 原理剖析(第 004 篇)CAS工作原理分析 - 一、大致介紹 1、關于多線程競爭鎖方面,大家都知道有個CAS和AQS,也正是這兩個東西才引申出了大...
摘要:負載均衡算法輪詢,加權輪詢。參考三負載均衡負載均衡由服務提供廠商提供。之后,集群內再采用其他的負載均衡方案。參考五負載均衡工作在層,它會與分別建立連接,需要維護這兩個連接的狀態。 運營研發團隊 施洪寶 一. 基礎知識 1.1 基礎 什么是負載均衡? 當單機提供的并發量不能滿足需求時,我們需要多臺服務器同時服務。當客戶請求到達時,如何為客戶選擇最合適的服務器?這個問題就是負載均衡問題。...
閱讀 2662·2021-11-25 09:43
閱讀 2472·2021-09-22 15:29
閱讀 984·2021-09-22 15:17
閱讀 3628·2021-09-03 10:36
閱讀 2223·2019-08-30 13:54
閱讀 1740·2019-08-30 11:23
閱讀 1163·2019-08-29 16:58
閱讀 1290·2019-08-29 16:14