SSO單點登錄詳解------三、單點註銷流程解析

一、前言

單點登錄自然也要單點註銷,在一個子系統中註銷,所有子系統的會話都將被銷燬,用下面的圖來說明:


單點註銷流程

步驟分析:
1. 用戶在CRM系統中點擊註銷按鈕.會重定向到統一認證中心的註銷方法
2. 統一認證中心接受到註銷請求之後,會銷燬全局的會話.
3. 統一認證中心會拿到之前在該系統中註冊的子系統集合.
4. 依次的調用子系統的登出方法,銷燬局部會話.
5. 每個系統中的會話都已經銷燬之後,跳轉到登陸頁面.

二、系統中的Cookie和Session存儲圖解

以下圖解是基於單點登錄圖解,在之前的基礎上,添加一些信息來幫我們更好的完成單點註銷的功能.

圖01:我們在統一認證中心登錄成功後.除了需要做這幾件事情.
1.創建令牌,後續操作中得發給子系統,相當於間接授權.
2.創建全局會話,並把令牌存儲到全局會話中.
3.把令牌信息存儲到數據庫中的t_token表中.主要是後續客戶端校驗token的有效性需要查詢這種表.
4.重定向到之前用戶請求的地址redirectUrl.並把令牌發給該子系統.http://www.crm.com/employee?token=VcnVMguCDWJX5zHa

還需要創建一張t_client_info信息
這張表存儲的是究竟有哪些子系統在統一認證中心註冊了.
在單點登錄的時候拿到註冊子系統的集合,依次調用子系統的登出方法.

單點註銷01

圖02:我們在CRM系統給統一認證中心發送一個校驗令牌token有效性的請求的時候.
除了帶上令牌token信息之外.還需要帶上如下信息:
1.客戶端的登出地址:http://www.crm.com/logout
2.客戶端的JSESSIONID(目的是在調用客戶端銷燬方法的時候能找到對應的會話並銷燬)

所以此時請求的地址爲:
http://www.sso.com/verify?token=VcnVMguCDWJX5zHa&clientUrl=http://www.crm.com/logout&JSESSIONID=F4C441B40D00A03DD8DDEBF751F2BF01

單點註銷02

圖03:當兩個系統都已經在統一認證中心註冊好之後,數據庫表t_token中存儲的信息如下圖所示.

單點註銷03

圖04:我們在CRM系統中點擊註銷按鈕,這個註銷按鈕的地址其實指向
http://www.sso.com/logout,訪問的是統一認證中心的註銷方法.

單點註銷04

圖05:瀏覽器發出請求http://www.sso.com/logout,瀏覽器會根據請求的域名找到本地的sso.com目錄cookie,並把cookie裏面的信息一併帶到服務器.d
通過cookie中的JSESSION可以找到統一認證中心的會話對象.

單點註銷05

圖06:拿到統一認證中心的會話對象之後
1.取出會話中的令牌信息token,通過令牌信息在表t_clinet_info中找到之前註冊的子系統集合.
2.遍歷子系統集合,依次調用子系統的登出方法,並把JSESSIONID帶上.

單點註銷06

圖07:子系統接受到請求之後,根據JSESSIONID找到對應的會話對象進行銷燬.

單點註銷07

圖08:需要把令牌信息從數據庫中刪除.

單點註銷08

圖09:清除全局會話對象.

單點註銷09

圖10:響應統一認證中心的登陸頁面

單點註銷10

統一認證中心與客戶端通信方式有多種,這裏以簡單好用的HttpURLConnection爲例,WebService、rpc、restful api都可以.

原文鏈接:https://www.jianshu.com/p/23f8e3958460

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章