单点登陆天然也要单点注销,在一个子系统中注销,全部子系统的会话都将被销毁,用下面的图来讲明: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... 来源:简书 著做权归做者全部。商业转载请联系做者得到受权,非商业转载请注明出处。