單點登陸天然也要單點註銷,在一個子系統中註銷,全部子系統的會話都將被銷燬,用下面的圖來講明:web
單點註銷流程數據庫
步驟分析:
1.用戶在CRM系統中點擊註銷按鈕.會重定向到統一認證中心的註銷方法
2.統一認證中心接受到註銷請求以後,會銷燬全局的會話.
3.統一認證中心會拿到以前在該系統中註冊的子系統集合.
4.依次的調用子系統的登出方法,銷燬局部會話.
5.每一個系統中的會話都已經銷燬以後,跳轉到登錄頁面.api
如下圖解是基於單點登陸圖解,在以前的基礎上,添加一些信息來幫咱們更好的完成單點註銷的功能.瀏覽器
圖01:咱們在統一認證中心登陸成功後.除了須要作這幾件事情.
1.建立令牌,後續操做中得發給子系統,至關於間接受權.
2.建立全局會話,並把令牌存儲到全局會話中.
3.把令牌信息存儲到數據庫中的t_token表中.主要是後續客戶端校驗token的有效性須要查詢這種表.
4.重定向到以前用戶請求的地址redirectUrl.並把令牌發給該子系統.http://www.crm.com/employee?token=VcnVMguCDWJX5zHa
服務器
還須要建立一張t_client_info信息
這張表存儲的是究竟有哪些子系統在統一認證中心註冊了.
在單點登陸的時候拿到註冊子系統的集合,依次調用子系統的登出方法.restful
單點註銷01cookie
圖02:咱們在CRM系統給統一認證中心發送一個校驗令牌token有效性的請求的時候.
除了帶上令牌token信息以外.還須要帶上以下信息:
1.客戶端的登出地址:http://www.crm.com/logout
2.客戶端的JSESSIONID(目的是在調用客戶端銷燬方法的時候能找到對應的會話並銷燬)spa
因此此時請求的地址爲: http://www.sso.com/verify?token=VcnVMguCDWJX5zHa&clientUrl=http://www.crm.com/logout&JSESSIONID=F4C441B40D00A03DD8DDEBF751F2BF01
rest
單點註銷02code
圖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/23f... 來源:簡書 著做權歸做者全部。商業轉載請聯繫做者得到受權,非商業轉載請註明出處。