多站点单点登录(SSO)设计(转) - TOMMYHU - 专注互联网开发及运营技术,提供相关资料及软件下载,奇趣网络时事评论!
Jul 27

多站点单点登录(SSO)设计(转) 不指定

多站点单点登录(SSO)设计(转),首先感谢博客园的QijMo童鞋的辛苦劳动,原文地址:http://www.cnblogs.com/qijun/archive/2010/07/27/1786076.html


这是一个老话题了,当前各门户一般也都实现了多个业务之间的单点登录。下面根据我经历过的项目,谈一下我自己的看法。

为什么需要单点登录:

产品刚上线时,一般由于用户量少,所有的功能都放在一起,一般也不需要具体的单点登录。随着用户量和业务发展的需要,要求逐步将产品按功能或性能分为相应独立的站点,并分开部署,这就需要在各个站点之间进行单点登录,以达到用户一次登录,就可以使用多个站点。

单点登录的实现:

简单方法: 在同一个域内的站点,可以简单的通过共享Cookie(将登录用户名存放Cookie中)来实现单点登录。这种方法实现简单,安全性方法可以通过将Cookie值加密方式加强,但对不同域下及不同开发语言下(如A站点C#,B站点C)实现麻烦。

推荐方法:建立统一的认证中心,认证中心提供:

  1、用户登录认证(认证用户名和密码),如果成功,返回表示本次登录的登录Token

  2、登录Token认证(认证Token是否正确),如果成功,返回当前登录的用户名

  3、延长Token有效期

  4、退出(使Token失效)

认证中心独立于各个站点,单点流程一般场景如下:

  1、用户在站点A输入用户名和密码点击登录

  2、站点A将用户名和密码转发给认证中心进行认证,认证中心返回Token

  3、站点A将当前登录用户和Token存入Session(或Cookie)

  4、在站点A上点击连接访问站点B,通过URL参数方式,将Token带给站点B

  5、站点B将Token转交到认证中心,认证正确,返回当前用户名。

  6、站点B将当前登录用户和Token存入Session(或Cookie),完成登录流程

这样的设计下的Token,还可以用在异步使用Ajax去访问服务器端的接口(接口可能独立部署在不同的站点下),这样只需要带上Token,服务器端的接口认证Token通过后,直接返回这个登录用户的相应用户信息。


安全性考虑:

  1、用户登录认证接口,可增加认证频率、认证IP等限制,防止暴力攻击

  2、Token其实就是一串表示本次登录的唯一字符串,可以生成字符串时,增加摘要信息。如Token的组成为:A+MD5(A+PWD) 的方式,A为随机生成的GUID,这样在验证Token时,就可以直接通过算法来验证合法性,只有算法验证通过后,再进行下一步的操作。

以上只是从整体上描述统一认证的设计,中间还有很多细节没有描述出来,需要了解的我们可进一步讨论。



这样的单点登录能做到在A站点超时的同时,B站点也超时吗?
可以实现。
一般当站点A自身超时的时候,站点A需要将Token到认证中心认证一下,如Token有效,则站点A不应超时。(Token在站点A有有效时间,一般设得比用户信息长一点)。
所以各个站点是否超时,统一按认证中心的时间来,这就实现了只有认证中心中的Token失效了,所有的站点才算超时。

▲返回顶部
Last modified by tommyhu on2010/07/27 17:22

Add a comment

Nickname

emotemotemotemotemotemotemotemotemotemotemotemotemotemotemotemot