一、前言

单点登录自然也要单点注销,在一个子系统中注销,所有子系统的会话都将被销毁,用下面的图来说明:

sso 登出_最强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信息

这张表存储的是究竟有哪些子系统在统一认证中心注册了.

在单点登录的时候拿到注册子系统的集合,依次调用子系统的登出方法.

sso 登出_最强SSO单点登录教程(三)单点注销流程分析-编程知识网

单点注销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

sso 登出_最强SSO单点登录教程(三)单点注销流程分析-编程知识网

单点注销02

图03:当两个系统都已经在统一认证中心注册好之后,数据库表t_token中存储的信息如下图所示.

sso 登出_最强SSO单点登录教程(三)单点注销流程分析-编程知识网

单点注销03

图04:我们在CRM系统中点击注销按钮,这个注销按钮的地址其实指向

http://www.sso.com/logout,访问的是统一认证中心的注销方法.

sso 登出_最强SSO单点登录教程(三)单点注销流程分析-编程知识网

单点注销04

图05:浏览器发出请求http://www.sso.com/logout,浏览器会根据请求的域名找到本地的sso.com目录cookie,并把cookie里面的信息一并带到服务器.d

通过cookie中的JSESSION可以找到统一认证中心的会话对象.

sso 登出_最强SSO单点登录教程(三)单点注销流程分析-编程知识网

单点注销05

图06:拿到统一认证中心的会话对象之后

1.取出会话中的令牌信息token,通过令牌信息在表t_clinet_info中找到之前注册的子系统集合.

2.遍历子系统集合,依次调用子系统的登出方法,并把JSESSIONID带上.

sso 登出_最强SSO单点登录教程(三)单点注销流程分析-编程知识网

单点注销06

图07:子系统接受到请求之后,根据JSESSIONID找到对应的会话对象进行销毁.

sso 登出_最强SSO单点登录教程(三)单点注销流程分析-编程知识网

单点注销07

图08:需要把令牌信息从数据库中删除.

sso 登出_最强SSO单点登录教程(三)单点注销流程分析-编程知识网

单点注销08

图09:清除全局会话对象.

sso 登出_最强SSO单点登录教程(三)单点注销流程分析-编程知识网

单点注销09

图10:响应统一认证中心的登陆页面

sso 登出_最强SSO单点登录教程(三)单点注销流程分析-编程知识网

单点注销10

统一认证中心与客户端通信方式有多种,这里以简单好用的HttpURLConnection为例,WebService、rpc、restful api都可以.

作者:叩丁狼教育

链接:https://www.jianshu.com/p/23f…

来源:简书

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。