sso单点登录的三种实现方式

By | 2010/12/15

sso即单点登录(Single Sign On),是目前很流行的站群登录解决方案。随着互联网巨头不断的扩展自己的业务范围,越来越多的应用需要整合在一起,而单点登录的实现更是提高用户黏贴度的一剂强效剂!

根据各大网站单点登录系统的的使用情况,如果按照应用来说,可以分为三种情况。而这三种情况又可以根据应用是否分布在多个域名分成两个方面。如果旗下所有的应用都是在一个域名下面,相信也不用多说,大家都会通过设置cookies的作用域来实现域下多个子域名的登录问题。

1
2
Response.COOKIES("cookie名").Domain = "23live.cn"   //asp
setcookie("cookie名","值","23live.cn")    //php

通过设置作用域,我们就可以简单的实现同域下所有应用的统一认证,这个比较简单。然后在多域环境下,因为无法直接对同一个cookies设置多个不同域名的作用域,这更代表了普遍现象,下面分别就两种方式进行探讨:

1.任意域名登录,生成多域名cookies
原理是在任意一个域名下登录以后,登录系统使用获得的用户登录数据分别去请求其他的域的登录接口(具体应用的时候可以通过iframe等方式隐藏的向其他域提交),相应接口返回对应域的cookies信息,这样当用户访问站群内其他站点的时候,因已经提前获取了认证cookies因此实现了单点登录。

比如sohu的单点登录系统就是采用的此方法,当用户在sohu旗下的任意网站登录时,首先统一登录到域passport.sohu.com下,登录成功后再使用iframe去请求其域下的passport.sohu.com/sso/crossdomain_all.jsp?action=login文件,此文件里面是一些js的文件请求,同样是请求passport.sohu.com域下文件,而此文件会读取cookies信息,并附加其身份信息重定向到其他的域上,其他的域根据附加过来的信息写cookies,实现多域的单点登录。退出的时候也是同样的机制。

ps:虽然原理简单,但涉及到了浏览器的隐私机制,ie需要设置特殊的文件头才可以正常设置跨域的cookies信息,详情可以看下设置P3P头实现跨域访问COOKIE,具体就是在重定向后的url页面设置cookies的时候,首先输出

1
header('P3P: CP="CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"');

2.指定认证服务器
设置专门用于身份验证的认证中心,用户登录时统一到认证中心进行登录和认证,验证后获得访问令牌(简单的可以是足够随机的唯一字符串)并返回原来的应用,当需要认证的时候就去认证中心查询登录及权限情况。此方法实施起来比较简单,但是有一个问题就是对于认证中心的负载,因为所有的认证都集于一点。

以上只是本来凭脑袋考虑出来的,并没有真正的实践。如果有高手看到,还请多多指教,希望能共同进步。最近打算研究下web登录认证方式及权限控制,尝试下单点登录。

发表评论

电子邮件地址不会被公开。

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据