手把手教你可复用SSO组件的设计(原理篇)

 在结构设计上复用性是一个很重要的特征,昨天半夜我发的系统地非侵入性也是很重要的,有同志邀我看看他的SSO系统,不过看后都我觉得不甚满意,如果要服用的话需要把分散的代码一点点抠出来,然后经过反复的修改调试后才能在新的系统中使用,那位老兄的SSO系统功能可能确实强大,而且还用了新技术,不过在复用性上我看还是没有摆脱集成上的痛苦,作过系统集成的同学们肯定对此深有感触。

昨天才批判了很多同学写东西语焉不详,结果回头就自己给了自己一耳巴子,上几篇关于SSO的描述都不够详细,于是这里在手把手系列里我们来一起看看如何设计一个高度可服用的SSO模块,这里我们假设所有的站点都使用.NET,因为成熟的SSO需要和采用各种不同技术的站点之间实现SSO,于是有JAVA,PHP,COM+,.NET多种形式的PSO模块。这里我们精力有限,所以先假设都用.NET,如果你会JAVA也可以自己用java来实现PSO。

一般来说单点认证都需要两端来完成,在认证中心端的我们称之为SSO,在网站端的模块我们称之为PSO。两个模块之间采用二次重定向技术来实现同步两端票据的方式来实现单点登陆

首先我们就来看看这两个模块式如何配合来完成单点认证的

第一个场景是用户首先访问认证中心登陆再去进入成员网站的情况:

首先是登陆后产生一个SSO的票据,这个票据是最重要的,因为它是决定用户是否登陆的关键。这个票据可以是Cookie,也可以是Session,我比较倾向于Cookie,因为现在有3DES加密,加密后篡改Cookie几乎成为不可能,所以无论是对于服务器负担来说还是安全性都是Cookie比较好,可能人认为万一不支持Cookie呢,不过我想Demo应该没问题吧,大不了我设计成两个都支持:},

PS,为什么不用非对称加密?其实那个效率不高,3DES的安全性已经足够了,至少现在还没有人宣称能破解

在登陆后就可以通知用户你已经登陆了,现在你可以去访问成员站点了,这个时候用户点击了成员站点的URL,进去了,这个时候首先就需要接受PSO组件的盘查,你有没有PSO的票据呢?很显然是没有的,所以这个时候请求就被Redirect回了认证中心,认证中心检查用户已经有了SSO的票据了,认为用户已经登录了,就把用户的SSO票据附加在URL后边然后Redirect回成员站点,成员站点的PSO这个时候获取到了SSO票据,于是知道了用户已经在认证端登录了,于是就创建一个PSO票据,然后返回给用户他所请求的内容。所以我们来看看其实PSO的逻辑更加复杂一点。

SSO的逻辑:

PSO的逻辑:

这里我们可以看到其实两个模块的功能都不算复杂,这里存在几个现实的问题,第一个是加密问题,票据需要加密,传输的URL也需要加密。

还有一个就是上一次我上篇文章里说的,在SSO把票据通过URL发送给PSO的时候,如果我们能够截获这个URL,不管他加没有加密,在下一次我们直接用这个URL去访问站点的时候因为已经包含SSO票据了,所以PSO会认为已经登陆了而直接产生PSO票据然后就让用户进去了,这显然是一个漏洞。所以呢,我们需要在这里给这个URL加一点盐值(所谓盐值其实就是加点料),我们通过在URL里加入时间戳来让这个URL具备时间限制,这个样子URL具备失效期,过了这个时间即使截获到了这个URL也完全没有作用了。

 

下一篇我们来看看所需要的数据结构和系统的架构设计如何防止侵入

to be continue......

posted on 2007-01-27 14:55 亚历山大同志 阅读(4361) 评论(22)  编辑 收藏 网摘 所属分类: 手把手系列

评论

#1楼  2007-01-27 16:04 人 [未注册用户]

有这么复杂吗?
我以前就做过一个,
http://www.cnblogs.com/listhome/archive/2006/10/15/529323.html   回复  引用    

#2楼 [楼主] 2007-01-27 17:54 亚历山大同志      

@人
手把手教就是要详细,如果你认为贴代码就行的话,那我无语了,5年前我就做过SSO了这个不是难不难的问题,我这篇只讲了原理,如果你觉得过程复杂了,那么可以这么说,你做的那个过程不严谨,做不到严格意义上的单点认证的效果。   回复  引用  查看    

#3楼  2007-01-27 20:26 臭石头      

支持亚历山大。
方案非常好,我们公司也用这个,只是碰到许多细节问题。   回复  引用  查看    

#4楼  2007-01-27 22:11 binking [未注册用户]

怎么看怎么像我现在参与的跟电信一个相关的身份认证解决方案!   回复  引用    

#5楼  2007-01-27 23:36 Klesh Wong      

写得不错,支持一下   回复  引用  查看    

#6楼  2007-01-30 17:01 amethyst [未注册用户]

studying ....   回复  引用    

#7楼  2007-01-30 19:19 陈开发 [未注册用户]

null   回复  引用    

#8楼  2007-01-31 08:17 风云      

不错,支持!
  回复  引用  查看    

#9楼  2007-05-09 16:32 海纳百川      

写的不错。正在完善SSO,很有参考价值。   回复  引用  查看    

#10楼  2007-08-29 17:37 heweitykc [未注册用户]

正在整合一个论坛到我们网站
第一个SSO场景正好符合我要找的东西 哈哈
借鉴了 老兄   回复  引用    

#11楼  2007-09-24 15:04 古寒鸦      

为什么不用web service呢?   回复  引用  查看    

#12楼  2007-09-29 10:26 weef [未注册用户]

跟踪一下passport的http包就什么都明白了.....   回复  引用    

#13楼  2007-09-29 10:53 huankfe [未注册用户]

思路讲解的很清晰   回复  引用    

#14楼  2007-09-29 22:33 e2mars [未注册用户]

恩,不错。我现在也在做SSO,思路和这个很相似,不过也确实遇到一些细节上得问题。期待更详细的讲解。。   回复  引用    

#15楼  2007-09-30 08:46 Allen Zhang      

@heweitykc
我不知道,把已有的论坛集成进来,如动网BBS,用以上的方法可行吗?
SSO已经认证通过了,而PSO程序要如何实现呢?论坛里的用户信息又要从哪里来? 谢谢讨论   回复  引用  查看    

#16楼  2007-10-10 11:34 kepazhiji [未注册用户]

不错   回复  引用    

#17楼  2008-03-17 09:17 stephenxie [未注册用户]

在外面做项目,单点登录的需求越来越多,但大多数是要求你和一些历史系统做单点。你没有人家的源代码,人家没有提供什么技术支持给你。这个时候该如何做?不知你的方案如何做到这样的单点登录。   回复  引用    

#18楼  2008-03-17 18:19 大石头      

总体方案是好的,最好能有详细的实现,到那时候,就会碰到许多具体问题了   回复  引用  查看    

#19楼  2008-07-29 23:10 AndyHuang [未注册用户]

能提供相关代码嘛?   回复  引用    


标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2007-01-30 09:04 编辑过
Google站内搜索

China-pub 计算机图书网上专卖店!6.5万品种 2-8折!
近千种 9-95 新二手计算图书火热销售中!
开发者征途系统新作:《设计模式——基于C#的工程化实现及扩展》



相关文章:

相关链接:
 

导航

公告

鉴于很多TX投诉黑色背景杀伤眼球,遂换个容易阅读的

<2008年3月>
2425262728291
2345678
9101112131415
16171819202122
23242526272829
303112345

统计

与我联系

搜索

 

常用链接

留言簿(30)

我参加的小组

我的标签

随笔分类(84)

随笔档案(83)

相册

朋友的Blog

同事的Blog

最新随笔

积分与排名

最新评论

阅读排行榜

评论排行榜