单点登录成功,单点登不出,搞了2天了,急啊,怎么解决?求助

A:www.cas1.com/cas/index.php 地址直接访问CAS统一登录界面
B: A登录成功后,希望在www.cas2.com/cas/index.php 免登录
C: 请问如何实现呢?现在出现的情况是下面这样的:
一、每个域名下访问都可以实现统一登录,那是因为client都有cas cookie存在,判断到有一处登录了,就会返回一个ST来验证客户端
二、创建也不同的ST之后,www.cas2.com这个域名指向的phpCAS客户端生成了新的session文件,并且与www.cas1.com的不一样
三、导致两次生成的ST不同,所以单点退出出问题了,这时候CAS不知道应该通知谁了,请问怎么解决呢?

阅读 3.1k
2 个回答

正好最近也在做单点登录,但是我们的所有服务都是在同一个域名下的,所以基于cookie的方式很容易实现,但是,你这里的情况是,完全不同的两个域名。是不能共用cookie的,Cookie最多跨二级域名来访问,比如a.cas.com和b.cas.com,这个是支持的,但是a.cas.com和a.cas1.com这个是不允许的,不然就乱套了。你的这个场景应该是统一登录统一登出的功能和sso应该还不一样。采用集中式session就很好解决了

我猜测你是想做不同域名下之间的单点登录,类似于淘宝和天猫。你自己可以试试,在浏览器里面先登陆taobao,然后你再登录tmall,你会发现tmall已经是免登陆了。
你的这个情况和上面的几乎类似,你可以通过如下步骤自己试试:

  1. www.cas1.com访问CAS统一登录界面,登录成功拿到cookie
  2. 在www.cas1.com页面把刚刚拿到的cookie通过jsonp或者内嵌iframe请求www.cas2.com的后台
  3. www.cas2.com后台到CAS中心进行验证
  4. www.cas2.com后台通过set-reponse或者其他手段把刚刚请求的cookie返回回去
  5. 当你请求www.cas2.com/cas/index.php的时候由于有第四步的存在,所以你会携带登录成功的cookie请求后端,也就实现了免登陆

PS:我比较懒,后端直接写了一个接口。。然后第一个服务前端通过param的方式把cookie给到第二个服务,然后验证cookie正确性,最后set-reponse返回

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题