通行证系统——跨域登陆与跨域验证

在为多个WEB App开发统一的Passport系统一直一些多主域名系统需要解决的问题。根据我的经验和研究,有一个类似 Google 的通行证的方案实施后,效果还是可以的。

SSO的主要效果是用户在任意一个 web app 登录后,别的 app 可以免于再次登陆,但用户浏览到别的 app 的域名下的时候,可以判断用户已经登录的状态,因此用户不用在同一个大平台下的不同域的 app 上多次登录,能有效的提高用户体验。

假设案例:有 三个域 A.com, B.com, C.com, 其中 A.com 为主要的 app。
解决方案为 passport.A.com 为登录中心,用于记录用户的状态,并分配唯一的token.
用户任意访问 A.com 或 B.com 或 C.com 时,判断是否已经拥有 token, 如果没有,则跳转到 passport.A.com 分配 token. 这个 token 对应着唯一的SESSION ID. 在服务后端,A.com与B.com以及C.com可以共享 SESSION Data(也可以利用唯一的 token 来读写某个唯一的数据区,里面有用户是否登录的数据),这样用户在任意一个域下登录后,会因为 token 而改变唯一的 SESSION DATA,这样 passport.A.com 也成为了登录状态!
但用户在同一个浏览器进程下,进入到尚未访问过的 C.com 时,会因为没有 token 而跳转到 passport.A.com (这里A.com下用户已经了 token 了),会得到一个和 passport.A.com 的一样的 token 跳转回 C.com ,同时,因为token而可以共享到 B.com, A.com 的 SESSION DATA,所以 C.com 也就可以免去再次登录的流程了。

示意图如下

from:http://hi.baidu.com/xbdh10000/blog/item/c63a958bc228e3d8fc1f1066.html

Tagged as: