SSO单点登录过程

原创
2017/05/05 10:13
阅读数 245

    在了解单点登录的之前我们先了解重定向和转发两个概念的区别:

    1.重定向:

  •    浏览器端发送http请求--> web服务器接受后发送302状态码响应及对应新的location给客户浏览器-->客户浏览器发现是302响应,则自动再发送一个新的http请求,请求url是新的location地址-->服务器根据此请求寻找资源并发送给客户;

    2.转发:

  • 客户浏览器发送http请求--> web服务器接受此请求-->调用内部的一个方法在容器内部完成请求处理和转发动作-->将目标资源发送给客户;

  通过对比我们发现转发只是在服务器内部进行,原始请求的信息并不会丢失;重定向由于发送了两次请求原始请求的信息丢失了;

    了解这个概念后,我们来看看怎样利用重定向完成我们的SSO登录操作:

     

     SSO登录最重要的是要保证两个基本点:

  •     ticket的合法性,ticket通过登录产生,每次登录后都不一样,不同服务器获取的ticket一定要保证与SSO服务器生成的ticket一致;
  •     用户信息的共享,实现机制有很多,可以通过cookie的方式也可以通过共享session的方式;
  • 考虑浏览器的同源策略,一级域名相同,只是二级域名不同的情况下,浏览器允许通过设置document.domain共享Cookie。也就是说,Cookie只能跨二级域名来访问,不能跨一级域名来访问。

    SSO解决方案目前有几种:

  • 一种是用户登录后client获取用户相关信息后,通过跨域的方式循环请求需要进行SSO的各个服务器如severA,server B然后各个服务器与浏览器之间构建自己的会话机制将用户信息保存会话中;
  •  另外一种是只要一台SSO服务器与浏览器之间在登录后生成相应的校验信息,其他服务器只要通过跨域的方式来获取校验信息,并且服务器与SSO之间通过校验后,当前服务器与浏览器之间建立会话即可;

 如上图所示:具体流程如下

  • 用户从浏览器端,向域名A服务器发起请求,域名A服务器校验是否登录,没有就重定向到sso服务器;
  •   sso服务器完成登录后,缓存用户信息,重定向到域名A服务器index页面
  • 域名A服务器index首页向sso服务器发起跨域请求获取用户信息,并且与域名A服务器建立会话,同时校验ticket的合法性,校验成功后完成本地会话的构建,并存储相关用户信息;
  • 用户从浏览器端,向域名B服务器发起请求,校验是否登录,此时如果本地会话检测到用户登录了则直接返回需求的内容,如果没有登录则重定向到sso服务器,sso服务器如果发现登录了则直接重定向到域名B服务器index首页,然后发起跨域请求,并且与b服务器建立会话,同时校验token的合法性;
  • 当用户退出后,假设是从域名A服务器退出的,则要清楚本地会话并且通知sso服务器进行缓存清理,然后有sso服务器通知其他服务器逐步进行会话清理保证所有服务器都能用户登录会话都清理完成;

 

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
打赏
0 评论
1 收藏
0
分享
返回顶部
顶部