[原创]单点登陆(SSO)组件的设计与实现二


上篇地址:[原创]单点登陆(SSO)组件的设计与实现一

新增登出流程图 2008-02-02



上面是整体流程图,这个SSO组件在安全上有了很充分的考虑,可以说是非常安全,那么下面看看登录请求数据的格式,和为何它能保证真实性和完整性



这样,当数据在传输过程中,如果站点编号,用户编号,请求号任意一项做任何的修改,当认证中心接收到数据之后,均无法与签名信息进行匹配。凡是认证中心能验证通过的请求均为合法的,真实的,完整的请求信息。

登录答复的格式如下图所示

因为登录号,时间戳,用户信息均加入数字签名信息,所以这些数据在传输中不能被伪造和篡改,而用户信息经过非对称性加密,也防止非真正请求发送者能解析出用户信息,这样在接受和发送请求和响应的时候,就实现了绝对的安全。
当然不是没有破绽,破绽在于当请求答复未到达联盟站点之前,有人截获并先于正常用户登录了联盟站点,此时我们可以将用户的ip信息作为答复数据的一部分,加入签名,以此实现很高的安全保证

登出流程图
作者:jillzhang
出处:http://jillzhang.cnblogs.com/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
Tag标签: SSO,单点登录
posted @ 2008-02-01 13:24 Robin Zhang 阅读(4920) 评论(26)  编辑 收藏 网摘 所属分类: asp.net.net framework

  回复  引用    
#1楼2008-02-01 13:59 | 诛仙[未注册用户]
这图画的真不错
  回复  引用  查看    
#2楼2008-02-01 14:35 | Tristan(Guozhijian)      
图,不错,学习
  回复  引用    
#3楼2008-02-01 21:25 | 饺子[未注册用户]
图是用什么工具画的 我是新手 介绍下。谢谢。
  回复  引用  查看    
#4楼[楼主]2008-02-02 08:47 | jillzhang      
@饺子
visio

  回复  引用  查看    
#5楼2008-02-02 09:52 | 亚历山大同志      
很好的图,不过这个SSO的机制很常见,03年的时候就在很多项目中大量应用了。不过,这个设计很经典。
  回复  引用  查看    
#6楼[楼主]2008-02-02 15:06 | jillzhang      
@亚历山大同志
恩,基本上为了保证数据安全,除了这一套,还真的没什么好方法

  回复  引用  查看    
#7楼2008-02-19 14:37 | Leem      
是采用session保存用户状态的,有没有试过用cookie来保存.
  回复  引用  查看    
#8楼[楼主]2008-02-19 14:46 | jillzhang      
@Leem
也可以用Cookie,需要自己更改组件

  回复  引用    
#9楼2008-04-16 11:56 | zamener[未注册用户]
我是新手,看了您的文章受益匪浅,楼主辛苦了,不过有些地方还是不明白,还望赐教。
您说“当然不是没有破绽,破绽在于当请求答复未到达联盟站点之前,有人截获并先于正常用户登录了联盟站点”
这个截获以后,怎么实现登陆啊?

  回复  引用  查看    
#10楼[楼主]2008-04-16 13:36 | jillzhang      
@zamener
截获到的是url,而且这个url只能使用一次,第二次就实效,截获后,可以抢先消费这个url,就可以登录

  回复  引用    
#11楼2008-04-18 10:33 | zamener[未注册用户]
谢谢搂主的回答。
再请教一个问题,site和server之间的传输有签名验证了,那用户的浏览器和site或者用户的浏览器和server之间的信息传输的安全性怎么保证,比如用户名密码之类的,刚接触.net不熟,还请搂主指教。
还有就是site和server之间签名的地方看的比较晕。第一次交互的时候site用的是privatekey签名,server用的是publickey验证,而从server返回site的时候,server用的是publicAndPrivatekey(也就是privatekey吧?)签名,site再用privatekey验证,看MSDN也没看懂是怎么回事。

  回复  引用  查看    
#12楼2008-07-28 17:42 | 非法操作      
@zamener
浏览器和server之间可以用ssl来保证安全啊

  回复  引用  查看    
#13楼[楼主]2008-07-28 19:20 | jillzhang      
@非法操作
的确,加上SSL之后会更加安全,更加适合应用

  回复  引用  查看    
#14楼2008-07-29 15:31 | 非法操作      
请问楼主:
假设有两个站点siteA,siteB, session 过期时间为30分
用户小C,首先用sso server的登录界面登录了整套系统,他可以在两个站点自由的浏览使用,当他登录后,一直在siteA活动,在29分钟后,他通过链接到达siteB,这时,由于sso server的session还在活动状态,所以没有出现登录界面,当他在siteB站点活动15分钟后,sso server和siteA的session已经过期,所以他如果想要登录siteA,就必须登录了。
如果按照楼主的思路好像就有这种情况发生了。


  回复  引用  查看    
#15楼[楼主]2008-07-29 16:07 | jillzhang      
@非法操作
一直在siteA活动,在29分钟后
那么此时小C在siteA中的会话还有多长时间呢?当他在siteB站点活动15分钟后,SiteA很可能没有过期吧!
而且此时SSOServer肯定没过期
因为在登陆SiteB的时候,SSO Server的Sesssion是被更新的了
如果你说在SiteB中活动150分钟的话,那此时的确如你所说SiteA和SSO Server可能已经过期。
凡是SSO Server过期,而待访问的站点没有会话,那就只能重新登陆。
如果不想这样,可以将SSOServer的过期时间设置的足够长。

  回复  引用    
#16楼2008-08-13 14:46 | Welkin Hu[未注册用户]
博主有没有实现和推广这套方案啊?很有价值的。
  回复  引用  查看    
#17楼2008-08-26 16:22 | Tony Zhou      
如果不想这样,可以将SSOServer的过期时间设置的足够长。
@jillzhang
设置足够长的话容易导致第二个人用他机器上来操作

  回复  引用  查看    
#18楼[楼主]2008-08-26 16:54 | jillzhang      
@Tony Zhou
那就没有办法了。这个和SSO没有关系,和会话保持有关系,任何系统都有这样的问题

请问楼主,学友们,这个图是用什么工具画的,真挺好看的。
  回复  引用  查看    
#20楼[楼主]2008-09-23 09:14 | jillzhang      
@a111111111111111111111111
visio

  回复  引用    
#21楼2008-10-28 10:37 | 学习中[未注册用户]
谢谢,楼主
  回复  引用    
#22楼2008-12-15 10:22 | zamener[未注册用户]
谢谢楼主的回答!
还有一个问题想要请教,site和server之间签名的地方看的比较晕。第一次交互的时候site用的是privatekey签名,server用的是publickey验证,而从server返回site的时候,server用的是publicAndPrivatekey(也就是privatekey吧?)签名,site再用privatekey验证,看MSDN也没看懂是怎么回事,还望楼主指教,谢谢!

  回复  引用    
#23楼2009-01-08 22:34 | desoto[未注册用户]
请问搂主:
提供代码中的client是什么站点? 联盟站点么?

  回复  引用    
#24楼2009-03-06 11:45 | 草里有马[未注册用户]
嗯,感觉和oAuth的认证过程有点像嘛。。。
  回复  引用    
#25楼2009-04-27 16:08 | 泽阳[未注册用户]
请问搂主:
如果是意外退出,也就是说没有退出按钮,杂处理呀?还有
如果是www.a.com,www.b.com,这两个域的话,使用<iframe>就行不通了吧?

  回复  引用    
#26楼2009-06-03 11:59 | 开发程序员10008[未注册用户]
我试过了<iframe></iframe>可以注销不同域站点a.com, b.com



发表评论

昵称: [登录] [注册]

主页:

邮箱:(仅博主可见)

评论内容:

  登录  注册

[使用Ctrl+Enter键快速提交评论]

0 1061212




历史上的今天:
2007-02-01 打靶算法分析

相关文章:

相关链接: