扩展

上面我们Cookie的作用域是整个二级域名laogu.com。所以不需要进行用户信息在Cookie之间的传递,假如Cookie的作用域是三级域名,或者各个系统之间的二级域名都不一样如何单点登录,这样单点登录就多了一步同步Cookie。保证Client 域名下和 ssoserver域名都有一个同名同值的 Cookie

第一次单点登录的关键

  1. 浏览器第一次访问client1什么信息没带,服务器判断未登录,命令浏览器重定向到sso-server,并且带上成功以后去哪里的地址

  2. 浏览器跑去认证中心,认证中心判断未登录过,返回登录页

  3. 填写账号密码点击登录,提交账号密码过去,还是记录了redirect..url

  4. 认证中心判断登录成功将用户信息存入Redis: UUID: userId

  5. 命令浏览器把上面生成的随机UUID保存在自己的认证中心域名对应的 cookie 中,key为“sso_user”。

  6. 命令浏览器重定向到原来位置,并且把随机UUID保存在自己的 client1 域名下

  7. 判断浏览器是否携带了cookie?(第一次没有),判断是否携带了sso_user这个固定参数(跳转回来的时候带了)

    校验这个参数是否合法(用这个值去Redis看是否能获取到用户)校验成功,响应页面并且把这个参数命令浏览器存在cookie中

跨域名登录

  1. 浏览器第一次访问client2什么信息没带,默认重定向到sso-server,并且带上成功以后回到哪里的地址
  2. 浏览器访问sso-server;不知不觉带上了以前的cookie(client1访问那会生成的)
  3. 认证中心sso-server发现这次请求携带了cookie(sso_user),取出cookie的值去Redis中也能查到用户
  4. 认证中心判断之前登录过,命令浏览器重新回到指定地址,并且在URL后面携带上从sso-server拿到的cookie
  5. 浏览器访问client2.com?sso_user=xxx
  6. client2发现浏览器携带了sso_user的指定参数,校验这个参数是否合法(用这个值去Redis看是否能获取到用户)校验成功,响应页面并且把这个参数命令浏览器自己也Set-Cookie:sso_user=xxxx

图示

https://www.processon.com/view/link/6370fa0c1efad454982780e5