聊聊單點登錄(SSO)中的CAS認證

来源:https://www.cnblogs.com/dtux/archive/2022/09/15/16697761.html
-Advertisement-
Play Games

SSO介紹 背景 隨著企業的發展,一個大型系統里可能包含 n 多子系統, 用戶在操作不同的系統時,需要多次登錄,很麻煩,我們需要一種全新的登錄方式來實現多系統應用群的登錄,這就是單點登錄。 web 系統 由單系統發展成多系統組成的應用群,複雜性應該由系統內部承擔,而不是用戶。無論 web 系統內部多 ...


SSO介紹

背景

  • 隨著企業的發展,一個大型系統里可能包含 n 多子系統, 用戶在操作不同的系統時,需要多次登錄,很麻煩,我們需要一種全新的登錄方式來實現多系統應用群的登錄,這就是單點登錄
  • web 系統 由單系統發展成多系統組成的應用群,複雜性應該由系統內部承擔,而不是用戶。無論 web 系統內部多麼複雜,對用戶而言,都是一個統一的整體,也就是說,用戶訪問 web 系統的整個應用群與訪問單個系統一樣,登錄/註銷 只要1次就夠了

SSO 定義

  • SSO(Single sign-on) 即單點登錄,一種對於許多相互關聯,但是又是各自獨立的軟體系統,提供訪問控制的方法
  • SSO(Single sign-on) 是比較流行的企業業務整合的解決方案之一。SSO(Single sign-on) 定義是在多個應用系統中,用戶只需要登錄一次就可以訪問所有相互信任的應用系統

以游樂場的通票為例:

我們只要買一次通票,就可以玩所有游樂場內的設施,而不需要在過山車或者摩天輪那裡重新買一次票。在這裡,買票就相當於登錄認證,游樂場就相當於使用一套 SSO 的公司,各種游樂設施就相當於公司的各個產品。

類比到各個子系統認證,如圖

SSO 三種類型

  • 各子系統在同一個站點下

  • 各子系統在相同的頂級功能變數名稱下

    同一個站點和相同頂級域下的單點登錄是利用了 Cookie 頂域共用的特性。目前數棧都是只需要在 UIC 的登錄頁面進行一次登錄就可以在各個子應用之間進行跳轉,這種操作源於根據設置 Cookie 中的 domain 為頂級功能變數名稱。

  • 各子系統屬於不同的頂級域

    如果屬於不同的域,不同域之間的 Cookie 是不共用的。怎麼辦?接下來就要說一說 CAS (Central Authentication Service) 流程了,這個流程是單點登錄的標準流程

CAS (Central Authentication Service)

CAS 是什麼

  Central Authentication Service ——— 中央認證服務,是 Yale 大學發起的一個企業級的、開源的項目,旨在為 Web 應用系統提供一種可靠的 SSO 解決方案。只是 SSO 解決方案的一種,它的流程其實跟 Cookie-session 模式是一樣的,單點登錄等於說是每個子系統都擁有一套完整的 Cookie-session 模式,再加上一套 Cookie-session 模式的 SSO 系統

第一次訪問 APP1:

  1. 用戶訪問 APP1,需要登錄的時候會重定向到 CAS Server
  2. CAS Server 進行賬號密碼認證,CAS Server 會保存 session,並生成 sessionId 返回給 SSO Client,SSO Client 寫入當前域的 Cookie,同時根據 TGT 簽發1個 ST 傳入 APP1
  3. APP1 攜帶 STCAS Server 請求校驗
  4. CAS Server 校驗成功後,返回 登錄態給 APPI 服務端
  5. APPI 服務端 將 登陸態寫入 session 並生成 sessionId 返回給 APPI Client
  6. 之後再做登錄認證,就是同域下的認證了

第一次訪問 APP2:

  1. 用戶訪問系統 APP2,當跳到 SSO 里準備登錄的時候發現 SSO 已經登錄了,那 SSO 生成一個 ST,攜帶該 ST 傳入 APP2
  2. APP2 攜帶 STCAS Server 請求校驗
  3. CAS Server 校驗成功後,返回 登錄態給 APP2 服務端
  4. APP2 服務端 將 登陸態寫入 session 並生成 sessionId 返回給 APPI Client
  5. 在這個流程里,APP2 就不用走登錄流程了

CAS 票據

TGT

CAS Server 創建TGT,存在 CAS ServerSession 裡面,根據用戶信息簽發的

TGC

 創建 TGT 的同時,生成 TGC。通過 CAS Serverresponse header 的 set-cookie 欄位設置 TGC,唯一標識用戶身份(sessionId) ST

ST

 根據 TGT 簽發的 ST,是 CAS 為用戶簽發的訪問某一 service 的票據

CAS 單點登錄(SSO) &  單點登出(SLO)

單點登錄(SSO)

第一次訪問 APP1:

  1. 訪問 APP1 服務地址,APP1 請求未通過認證,重定向至 CAS Server 地址。
  2. 訪問 CAS Server 地址,發送認證請求,帶上 Cookie
  3. CAS Server 識別出用戶沒有 Cookie 信息,沒有登錄,返回 CAS 登陸頁地址。
  4. 用戶輸入正確的賬戶密碼,CAS Server 用戶認證通過,創建 SSO Session
  5. 重定向回 APP1 的服務地址,併在 cookie 中創建了 CASTGCTGC 中包含了 Ticket(TGT)TGT 就是 SSO Sessionkey
  6. 訪問 APP1 的服務地址,並帶上 ST,客戶端拿到 STCAS Server進行認證。
  7. CAS Server 認證成功,返迴響應信息給 APPI
  8. APPI 拿到成功的響應後,設置 Session,並重定向回 APP1 的地址,並設置 Cookie JSESSIONID
  9. APPI 發起請求,帶上 Cookie 中的信息,其中 JSESSIONID 用來確定當前用戶所對應的 session 信息,發送給客戶端進行校驗。
  10. 客戶端使用 JSESSIONIDSession 中存儲的數據進行校驗。
  11. 校驗通過,返回正確的內容,展示 APP1

第二次訪問 APP1:

  1. APPI 發起請求,並帶上 Cookie 中的 JSESSIONIDAPPI 服務端。
  2. APPI 服務端 使用 JSESSIONIDSession 中存儲的數據進行校驗。
  3. 校驗通過,返回正確的內容,展示 APP1

file

在 APP1 登陸成功的情況下,第一次訪問 APP2:

  1. 訪問 APP2 服務地址,APP2 請求未通過認證,重定向至 CAS Server 地址。
  2. 訪問 CAS Server 地址,發送認證請求,帶上 TGT 信息。
  3. CAS Server 通過 TGT 去查找 SSO 的信息進行認證。
  4. 認證通過,生成票據 ST 重定向至 APP2 的服務地址。
  5. APP2 服務 攜帶 STCAS Server 進行認證。
  6. CAS Server 認證成功,返回客戶端通過的響應。
  7. 客戶端拿到成功的響應後,設置 Session,並重定向至 APP2 的地址,並設置 Cookie MOD_AUTH_CAS_S
  8. APP2 發起請求,帶上 Cookie 中的 MOD_AUTH_CAS_S ,發送給客戶端進行校驗。
  9. 客戶端使用 MOD_AUTH_CAS_SSession 中存儲的數據進行校驗。
  10. 校驗通過,返回正確的內容,展示 APP2

官方時序圖

單點登出(SLO)

  1. APP1 平臺 請求退出登錄後, 先在 query 中 攜帶 service 欄位 重定向 CAS 登出地址
  2. 用戶攜帶 service query 欄位和 CASTGC 請求到 CAS Server
  3. CAS Server 根據 CASTGC 找到 TGT的信息,刪除 TGT 完成 CAS 的註銷
  4. CAS Server 可以在 TGT 中拿到關聯的所有 ST, 根據 ST 找到對應的應用註冊信息,調用其中的 logoutUrl,把 ST 包裝到 logoutRequest 發送給 APP1
  5. APP1 根據 logoutRequest 找到 ST ,查找 Session 中以 ST 為鍵的值刪除,清除登陸狀態
  6. APP1 登出成功
  7. APP2 根據 logoutRequest 找到 ST ,查找 Session 中以 ST 為鍵的值刪除,清除登陸狀態
  8. APP2 登出成功

file


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 背景 如果你有自建的 MySQL 集群,並且已經感受到了雲原生的春風拂面,想將數據遷移到 Kubernetes 上,那麼這篇文章可以給你一些思路。 文中將自建 MySQL 集群數據,線上遷移到 Kubernetes 的 MySQL 集群中,快速實現了 MySQL on Kubernetes。 適用場 ...
  • 更多技術交流、求職機會,歡迎關註位元組跳動數據平臺微信公眾號,回覆【1】進入官方交流群 1.前言 埋點設計文檔面向開發的埋點需求說明書,目的是讓開發理解需要在什麼情況下做哪些埋點採集,以及具體需要的屬性參數類型、取值,確保採集的準確性和完善性。為實現整體指標體系,數據產品落地、使用,需要對開發進行埋點 ...
  • 摘要: HetuEngine作為MRS服務中互動式分析&多源統一SQL引擎,親自全程體驗其如何實現多數據源的跨源跨域分析能力。 本文分享自華為雲社區《MRS HetuEngine體驗跨源跨域分析【玩轉華為雲】》,作者:龍哥手記。 HetuEngine作為MRS服務中互動式分析&多源統一SQL引擎,親 ...
  • 用戶觸達:可以簡單理解為通過某種方式將消息傳遞給用戶的行為;觸達的特定消息從功能上可分展示、引導落地兩層。用戶觸達作為一種產品運營方式,已經融入我們日常生產活動的方方面面。在移動互聯網的世界里,我們的產品離不開觸達,用戶活動也離不開觸達。 ...
  • IOS開發工具官網地址 http://www.applicationloader.net/ 最新版本已經優化了沒支付688給apple的賬號登錄流程,無需再安裝其他軟體。 立即下載最新版本 在appuploader官網首頁下載,如果您是windows電腦,則選擇點擊 windows版,如果是mac ...
  • 最近,“你這背景太假了”席卷全網。由於身後風景太優美,被網友質疑背景太假,某主播為了自證,直接把手裡的桶扔進了背後的水裡。短短幾天時間播放量幾十億,引發了全網P圖狂潮,網友在短視頻App里將其人像摳出來,替換了不同的背景,各類創意視頻很快衝上熱搜。 現如今,視頻人像摳圖有著廣泛應用。在直播App里可 ...
  • 自適應佈局和響應式佈局的區別? 1.響應式的概念覆蓋了自適應,但響應式包含的東西更多,響應式的佈局可以根據屏幕的大小自動調整頁面的展示方式 2.自適應有一個致命缺點:如果屏幕尺寸太小,即使網頁能夠根據屏幕大小進行適配,也會感覺在小屏幕上查看,內容過於擁擠 3.響應式解決了自適應佈局的問題,響應式能自 ...
  • 一、this指向 點擊打開視頻講解更加詳細 this隨處可見,一般誰調用,this就指向誰。this在不同環境下,不同作用下,表現的也不同。 以下幾種情況,this都是指向window 1、全局作用下,this指向的是window console.log(window); console.log(t ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...