您好,匿名用户
随意问技术百科期待您的加入

如何实现 [ 跨域单点登录 ] ?

0 投票

管理用户网站

  • 用户账户网址:http://accounts.com
  • 用户登录网址:http://accounts.com/login
  • 用户等处网址:http://accounts.com/logout

应用网站
  • 应用1:http://app1.com
  • 应用2:http://app2.com

实现场景
  1. 登录 应用1,跳转到 http://accounts.com/login 进行登录
  2. 登录成功跳转 回应用1,地址后面会带个token,例如:http://app1.com/callback?token=xxxx 来验证登录
  3. 浏览了 应用1 后,用户进入 应用2 (用户可能会自己输入 app2.com 的地址访问 应用2)
  4. 此时 应用2 通过“某种方式”来判断之前 应用1 的登录与否,来设置当前用户是否登录

问题是如何实现场景中的 第4条?


我现在想到的是:
  1. 同步登录:像 discuz 那样,在登录一个应用时对其它应用进行同步登录,缺点是登录后最好是等个几秒在跳转使其它应用能够有足够时间写下 cookie,但是我不喜欢“要等几秒”的方式
  2. 使用 jsonp:虽然知道怎么用 jsonp 进行跨域请求,但是实现起来有些困难,而且处理不好就有安全问题

不知各位有什么好的方法???


----------------------- 华丽的分割线 ---------------------------

下午花了点时间分别研究了一下两组网站的登录方式:


  1. google.com 和 youtube.com
  2. taobao.com 和 etao.com

一、 google.com 和 youtube.com
情况一:都未登录,但是浏览过 youtube
  1. 登录 google.com 通过 https://accounts.google.com/ServiceLoginAuth 验证用户名密码
  2. 通过验证后跳转到 https://accounts.google.com/CheckCookie 检查是否有浏览过其它应用,比如说 youtube,这时就再次跳转到 https://accounts.youtube.com/accounts/SetSID 进行登录
  3. 最后再跳回 google.com 的首页

情况二:已登录 google.com,但未浏览过 youtube 也并未登录
  1. 由于登录了 google.com 所以我直接从地址栏里输入地址进行第一次访问 youtube
  2. 进入 youtube 首页显示的是我需要登录,故点击登录
  3. 依然跳转到 https://accounts.google.com/ServiceLoginAuth,但是不用任何输入直接跳回 yutube 首页

二、 taobao.com 和 etao.com
  1. 不管我有没有登录 taobao.com,我进入 etao.com 首页,首先会检查 cookie 是否登录
  2. 登录则 etao.com 首页显示登录状态
  3. 未登录则跳转到 http://jump.taobao.com/jump?target=http%3A%2F%2Fwww.etao.com%2F%3Ftbpm%3Dt 来检查在 taobao.com 是否有登录
  4. 登录则跳回 http://pass.etao.com/add?... 进行登录后在跳回首页,登录状态为登录
  5. 未登录则依然跳回首页,登录状态为未登录

现在基本知道怎么去做了,或者有其它更好方法的?说出来大家讨论一下……

用户头像 提问 2012年 12月1日 @ Lucia 上等兵 (416 威望)
分享到:

1个回答

0 投票

研究并看过sohu的,拿出来分享。

统一在 login.common.com?return=www.a.com 登录,(带需要返回的地址)
if 验证成功 return js,在login.common.com/success 加入返回的JS,并显示,然后跳回 return 参中带的值。

那么这段JS内容是什么样的呢?
就是通过JS的方式调用各个站点,生成各自的cookie。

目前 ucenter 也是采用这种方式。 登录中心,应该要有一个类似应用列表这样的东西。

用户头像 回复 2012年 12月1日 @ Archer 上等兵 (494 威望)
提一个问题:

相关问题

0 投票
1 回复 47 阅读
用户头像 提问 2012年 12月1日 @ Talon 上等兵 (294 威望)
0 投票
1 回复 40 阅读
0 投票
1 回复 65 阅读
用户头像 提问 2012年 12月1日 @ Evelynn 上等兵 (244 威望)
0 投票
1 回复 50 阅读
用户头像 提问 2012年 12月1日 @ Pikachu 上等兵 (475 威望)
0 投票
1 回复 95 阅读

欢迎来到随意问技术百科, 这是一个面向专业开发者的IT问答网站,提供途径助开发者查找IT技术方案,解决程序bug和网站运维难题等。
温馨提示:本网站禁止用户发布与IT技术无关的、粗浅的、毫无意义的或者违法国家法规的等不合理内容,谢谢支持。

欢迎访问随意问技术百科,为了给您提供更好的服务,请及时反馈您的意见。
...