1、springboot 单点登录
单点登录英文全称Single Sign On,简称就是SSO。它的解释是:在多个应用系统中,只需要登录一次,就可以访问其他相互信任的应用系统
2、流程图
3、流程解析
现在有认证服务器 ssoserver.com,客户端client1.com和客户端client2.com 两个不同域名的服务器,并且没有子域名关系(如果两个客户端有子域名关系,session进行统一存储,可以通过SpringSession手动去设置session的作用域,放大作用域,取父域名最为session的作用域,来完成session数据共享),进行统一登录认证的时候,客户端1和客户端2都需要到认证服务器去登录。登录流程如下:
- 当浏览器向客户端client1.com发出访问受保护资源的请求时
- 客户端client1.com收到访问请求后,会判断当前请求的用户是否登录,什么样是登录状态的?
- 请求的时候参数携带token,获取token之后,查询出用户信息保存到session中,下次可以通过cookie中的信息可以访问到用户数据。
- 已经存在session,通过cookie中的信息可以访问到用户数据。
- 如果请求接口的时候,用户没有登录,则让浏览器重定向到新的位置http://ssoserver.com:8080/login.html?redirect_url=http://client1.com:8081/employees,redirect_url之前是认证服务器的地址,后面是认证成功之后要跳转的地址。
- 接着去访问认证系统的登录页面,在登录页面会判断是否登录过,也就说判断当前浏览器中是否保存的有上一次登录成功之后留下的cookie信息,例如上一次成功之后留下来的sso_token信息
- 如果之前没有系统进行登陆过,则在浏览器上展示登录页面信息,输入账号密码,并且携带成功之后的回调地址进行登录认证
- 登录成功之后,会做两件事,一件事是留下客户端登录之后的痕迹,即在客户端上保留ssoserver.com的cookie信息,第二件事是携带登录成功之后的token信息,返回回调地址,会携带token进行接口的再次校验,校验通过之后,会将用户信息保存到session中。
- 在客户端client1.com登录成功之后,浏览器也向客户端client2.com也发出访问受保护资源的请求
- 客户端client2.com收到访问请求后,会判断当前请求的用户是否登录
- 如果客户端client2.com判断用户没有登录,则让浏览器重定向到新的位置http://ssoserver.com:8080/login.html?redirect_url=http://client2.com:8081/boss,但是因为之前客户端client1.com登录成功之后,留下的有cookie信息,当再次访问该域名下的接口时,会携带cookie信息,接口认证通过之后,会携带token返回回调地址,在client2.com认证通过之后,会根据token信息获取到用户信息,然后将这些用户数据保存到session中。
- 之后无论哪个系统访问,自己的session里面都保存了token对应的用户信息,就不用去登录。