关于Single Sign On的一些设想

单点登陆,始终有其吸引力。然而就实现而言,结合栋力无限现有情况,比较困难。

主要原因在于栋力无限门户下属各个子站点,不仅有自己开发的,也有直接使用的他人开发的开源项目的。特别对于后者,如果花大力气,对其进行修改,使其使用我们自身的passport,一旦其有所升级、打patch等变动,就会导致大量的重复劳动。

在现有条件下,是否存在一种花费最小代价的Single Sign On实现方式?换句话说,使得插接到passport的各个子站点,所作的修改尽量的少?

最近有一个设想,就是如果想要尽可能少的修改各个子站点,实现passport的通用性,唯有通过模拟各个子站点自身的登陆行为。

法1、填写username password,并post到其form的action链接里面;
法2、直接在用户本机写入cookie文件;

两种方式其实都可以。具体一点说:

第一阶段试验目标:

1、登陆passport.dormforce.net后,passport修改用户登陆状态信息为已登录(并以Web Services或其他方式对外公开)。

2、passport调用放在各个子站点自身程序里的一个模板页面,那个页面实现的唯一功能就是采用法1或法2模拟登陆本子站点,若有必要,在这里,还可以增加对Session,Application等变量的支持;(由于开源,可以跟踪入内,找到其登陆代码,copy过来修改一下即可)(调用的时候,最好使用AJAX等技术后台加载,防止页面频繁刷新,提高用户体验)

3、passport调用放在各个子站点自身程序里的一个模板页面,那个页面实现的唯一功能就是采用法1或法2登出本子站点,若有必要,在这里,还可以增加对Session,Application等变量的支持;(由于开源,可以跟踪入内,找到其登出代码,copy过来修改一下即可)(调用的时候,最好使用AJAX等技术后台加载,防止页面频繁刷新,提高用户体验)

至此,应该能够实现在passport登陆后,畅通访问各个子站点;在passport登出后,退出所有子站点;

第二阶段试验目标:

1、通过用户登陆状态信息等其他验证安全的手段,确保放在各个自站点的模拟登陆页面安全。

2、修改各个子站点的登陆和登出链接,指向passport

至此,应该能够实现我们最初的目标。

我再稍微总结一下:

passport实现的功能就是登陆时,自动登陆各个站点;登出时,自动登出所有站点。这里和通常意义的passport不一样,因为通常意义的passport一般就只有一个cookie。

一个新插入的子站点(不管自身项目还是开源项目),若想使用passport认证,则进行如下操作:

1、找到登陆的代码,套入passport提供的模板页面中;
2、找到登陆和登出的链接,指向passport;

当然,对于第二步来说,仍然比较困难,但是较之完全替换其帐户系统,理论上讲应该轻松许多,这也是我目前能想到的代价最小的实现Single Sign On的方式了。

由于这只是一些设想,跟曾毅和卢浩森聊了一下,据称问题不大,而且曾毅貌似已在音乐站上测试成功第一阶段的目标,所以特贴出来,看看各位达人认为:

1、有可行性么?
2、有没有其他更好更贴近栋力无限自身特点的方式?

《关于Single Sign On的一些设想》上有9条评论

  1. 由于模板页面本身处于子站点内,相当于其自身,感觉session和application应该都可以实现吧

  2. 流行了-冷了-又流行了???
    post到其form中action指向的新页面,然后狂加session,毕竟各网站,或以后的要加进dormforce的新的开源网站里,他们保存的用户和密码的session值不一样,否则要把一个个页面都改成统一session值,会死人滴~
    但如果有些网页既不是通过session,也不是通过Application,而如通过url,redirct到另一页,然后通过取它的url中的用户名密码进改页面,就脑火了,呵呵~

    对了,我是讨厌tr,td的,一不小心忘了……….

  3. Session是不可行的吧?只可以在一个子站点下使用,而无法相互共享。
    cookies是个比较理想的选择

  4. Session只可以在一个子站点下使用?我没试过,今天领交到了…

    不过Single Sign On最爽的还是用在应用软件上,通过一个中间服务器来保存帐户或帐户对应的码表,每一个应用软件(如nu里用的处理报修的软件)打开时,先通过中间服务器取帐户就可以直接登陆了,这样就可以让一个局域网里的用户用一个帐户登陆所以软件了,当然安全性要多考虑……….中间服务器存东西其实直接可以把它当做平时在注册表存数据一样……….

  5. >>>否则要把一个个页面都改成统一session值
    不用统一阿,就用它们本来自身的

    >>>如通过url,redirct到另一页,然后通过取它的url中的用户名密码进改页面
    这种方式够BT的,呵呵,不过关键在于如果哪个模板页面本来就在子站点下,完全属于子站点的一部分,子站点本身前提又是开源的,模板页面可以完全模拟其登陆实现,所以应该都可以实现吧

    >>>Session是不可行的吧?只可以在一个子站点下使用,而无法相互共享
    就是你说的这样啊,不过本来就只需要在一个子站点下使用阿,不用相互共享:)

    >>>不过Single Sign On最爽的还是用在应用软件上,通过一个中间服务器来保存帐户或帐户对应的码表
    貌似我取这个怨念的名字有点问题,不过我只取了其英文本意,和微软/IBM等等提供的Single Sign On解决方案,没有多大关系

发表回复

您的电子邮箱地址不会被公开。

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