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

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