一、前言
单点登录自然也要单点注销,在一个子系统中注销,所有子系统的会话都将被销毁,用下面的图来说明:
单点注销流程
步骤分析:
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/23f…
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。