单点登录不同域之间
扩展
上面我们Cookie的作用域是整个二级域名laogu.com。所以不需要进行用户信息在Cookie之间的传递,假如Cookie的作用域是三级域名,或者各个系统之间的二级域名都不一样如何单点登录,这样单点登录就多了一步同步Cookie。保证Client 域名下和 ssoserver域名都有一个同名同值的 Cookie。
第一次单点登录的关键
浏览器第一次访问client1什么信息没带,服务器判断未登录,命令浏览器重定向到sso-server,并且带上成功以后去哪里的地址
浏览器跑去认证中心,认证中心判断未登录过,返回登录页
填写账号密码点击登录,提交账号密码过去,还是记录了redirect..url
认证中心判断登录成功将用户信息存入Redis: UUID: userId
命令浏览器把上面生成的随机UUID保存在自己的认证中心域名对应的 cookie 中,key为“sso_user”。
命令浏览器重定向到原来位置,并且把随机UUID保存在自己的 client1 域名下
判断浏览器是否携带了cookie?(第一次没有),判断是否携带了sso_user这个固定参数(跳转回来的时候带了)
校验这个参数是否合法(用这个值去Redis看是否能获取到用户)校验成功,响应页面并且把这个参数命令浏览器存在cookie中
跨域名登录
- 浏览器第一次访问client2什么信息没带,默认重定向到sso-server,并且带上成功以后回到哪里的地址
- 浏览器访问sso-server;不知不觉带上了以前的cookie(client1访问那会生成的)
- 认证中心sso-server发现这次请求携带了cookie(sso_user),取出cookie的值去Redis中也能查到用户
- 认证中心判断之前登录过,命令浏览器重新回到指定地址,并且在URL后面携带上从sso-server拿到的cookie
- 浏览器访问client2.com?sso_user=xxx
- client2发现浏览器携带了sso_user的指定参数,校验这个参数是否合法(用这个值去Redis看是否能获取到用户)校验成功,响应页面并且把这个参数命令浏览器自己也Set-Cookie:sso_user=xxxx
图示
https://www.processon.com/view/link/6370fa0c1efad454982780e5
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 阿鑫的博客ッ!
评论



