Spring cloud微服务安全实战-5-7实现基于session的SSO(客户端应用的Session有效期)

授权模式改造成了Authorization code完成了改造的同时也实现了SSO。微服务环境下的前后端分离的单点登陆。
Spring cloud微服务安全实战-5-7实现基于session的SSO(客户端应用的Session有效期)
把admin的服务重启。刷新页面 并没有让我去登陆,直接就进入了首页。
Spring cloud微服务安全实战-5-7实现基于session的SSO(客户端应用的Session有效期)
order的API控制台
Spring cloud微服务安全实战-5-7实现基于session的SSO(客户端应用的Session有效期)
只要你在认证服务器上的session没过期。认证服务器就知道你是谁,他就不会让你输入用户名密码了。直接跳回到客户端应用。
Spring cloud微服务安全实战-5-7实现基于session的SSO(客户端应用的Session有效期)

一共有三个有效期。
Spring cloud微服务安全实战-5-7实现基于session的SSO(客户端应用的Session有效期)

退出操作

退出的时候。现在前端服务器清空session,认证服务器也需要清空session

Spring cloud微服务安全实战-5-7实现基于session的SSO(客户端应用的Session有效期)
在前端服务器退出后,再跳转到认证服务器执行退出。logout是spring security默认的退出路径
Spring cloud微服务安全实战-5-7实现基于session的SSO(客户端应用的Session有效期)
Spring cloud微服务安全实战-5-7实现基于session的SSO(客户端应用的Session有效期)
这时候跳转到了认证服务器。
Spring cloud微服务安全实战-5-7实现基于session的SSO(客户端应用的Session有效期)
点击退出后
Spring cloud微服务安全实战-5-7实现基于session的SSO(客户端应用的Session有效期)

如果再次输入账号密码登录
Spring cloud微服务安全实战-5-7实现基于session的SSO(客户端应用的Session有效期)
这时候没跳转会前端, 这是个404的页面。
Spring cloud微服务安全实战-5-7实现基于session的SSO(客户端应用的Session有效期)

这是因为我们之前触发的登陆页面的请求,是下面这样的一个请求
Spring cloud微服务安全实战-5-7实现基于session的SSO(客户端应用的Session有效期)
这里他是不知道是要跳转回admin的应用的,所以默认进去了自己的主页。 :9090/根目录,这个主页没做任何的处理 所以是一个404页面。
Spring cloud微服务安全实战-5-7实现基于session的SSO(客户端应用的Session有效期)

退出操作优化

退出的时候加一个参数redirect_uri
Spring cloud微服务安全实战-5-7实现基于session的SSO(客户端应用的Session有效期)

Spring cloud微服务安全实战-5-7实现基于session的SSO(客户端应用的Session有效期)

认证服务器改造

首先要找到处理logout这个请求的代码。
Spring cloud微服务安全实战-5-7实现基于session的SSO(客户端应用的Session有效期)
它会拦截logout的方法,然后
Spring cloud微服务安全实战-5-7实现基于session的SSO(客户端应用的Session有效期)
拦住以后会生成一个页面出来。
Spring cloud微服务安全实战-5-7实现基于session的SSO(客户端应用的Session有效期)
页面上很简单,上面一个提示语,问题你是不是确认要退出。点了按钮就会提交这个表单。
Spring cloud微服务安全实战-5-7实现基于session的SSO(客户端应用的Session有效期)
我们来复制这个类,首先在我们的代码里面建一个一模一样的包
Spring cloud微服务安全实战-5-7实现基于session的SSO(客户端应用的Session有效期)
。创建一个一模一样的类
Spring cloud微服务安全实战-5-7实现基于session的SSO(客户端应用的Session有效期)

复制整个代码到新的类里面。因为java的加载机制,所以我们自己写的这个类 会优于Spring Security原来的类 ,先加载。如果他发现有这样一个类,就不会再去加载Spring jar包里面的类了。Spring cloud微服务安全实战-5-7实现基于session的SSO(客户端应用的Session有效期)
提示语和button都去掉,然后加上一段js代码
Spring cloud微服务安全实战-5-7实现基于session的SSO(客户端应用的Session有效期)

加一个隐藏域,里面是从url获取到的参数 redirect_uri
Spring cloud微服务安全实战-5-7实现基于session的SSO(客户端应用的Session有效期)

成功以后的处理器


实现LogoutSuccessHandler接口。

Spring cloud微服务安全实战-5-7实现基于session的SSO(客户端应用的Session有效期)
声明称Spring的Component 然后 接收redirect_uri参数并跳转。
这里是退出成功以后触发的
Spring cloud微服务安全实战-5-7实现基于session的SSO(客户端应用的Session有效期)

修改Server的配置

让它使用我们退出的处理器。在OAuth2WebSecurityConfig
Spring cloud微服务安全实战-5-7实现基于session的SSO(客户端应用的Session有效期)

就是我们之前在Spring Security源码看到的配置
Spring cloud微服务安全实战-5-7实现基于session的SSO(客户端应用的Session有效期)
把上面代码复制到我们的配置文件内。
把我们自己写的退出的处理器注入进来。
Spring cloud微服务安全实战-5-7实现基于session的SSO(客户端应用的Session有效期)

Spring cloud微服务安全实战-5-7实现基于session的SSO(客户端应用的Session有效期)
formLogin这里也可以做一些改造。可以自己指定登陆的页面,这样就是自己自定义登陆的页面
Spring cloud微服务安全实战-5-7实现基于session的SSO(客户端应用的Session有效期)
 

测试

服务器重新启动
Spring cloud微服务安全实战-5-7实现基于session的SSO(客户端应用的Session有效期)
刷新admin的首页,然后获取订单信息
Spring cloud微服务安全实战-5-7实现基于session的SSO(客户端应用的Session有效期)

Spring cloud微服务安全实战-5-7实现基于session的SSO(客户端应用的Session有效期)

点击退出按钮。又跳到了一个登陆页面。
Spring cloud微服务安全实战-5-7实现基于session的SSO(客户端应用的Session有效期)
这是退出后,回到amdin,又从admin发送 了一个authorize请求触发的登陆
Spring cloud微服务安全实战-5-7实现基于session的SSO(客户端应用的Session有效期)
这个时候再去做登陆
Spring cloud微服务安全实战-5-7实现基于session的SSO(客户端应用的Session有效期)

再登陆进去 就会进去到我们的首页上来。
Spring cloud微服务安全实战-5-7实现基于session的SSO(客户端应用的Session有效期)

结束

 

上一篇:单系统登录机制


下一篇:SSO之CAS