jinfeng_wang
G-G-S,D-D-U!
BlogJava
首页
新随笔
联系
聚合
管理
400 Posts :: 0 Stories :: 296 Comments :: 0 Trackbacks
公告
欢迎交流链接,给我
留言
常用链接
我的随笔
我的评论
我的参与
最新评论
留言簿
(40)
给我留言
查看公开留言
查看私人留言
随笔分类
(592)
.Net(17)
2016-OS(6)
2016-REDIS(41)
2016SCALA(1)
2016-Sharding-JDBC(3)
2016-thinking(12)
2016-thread(2)
2016-zookeeper(29)
amusement(32)
ant(3)
AOP(6)
cpp(15)
Cruise Controle(1)
Eclipse(2)
hadoop(1)
hibernate(10)
idoms(1)
java(52)
Junit(6)
Linux(49)
log4j
maven(8)
News(1)
OpenSource(2)
oracle(5)
Other(20)
server(1)
spring(18)
structs(4)
Thinking(16)
tuxedo(16)
view(22)
weblogic(2)
website(8)
ZZ(180)
随笔档案
(400)
2017年2月 (6)
2017年1月 (4)
2016年12月 (82)
2011年10月 (2)
2010年4月 (10)
2010年3月 (1)
2010年2月 (2)
2009年11月 (1)
2009年10月 (5)
2009年9月 (3)
2009年6月 (1)
2009年5月 (41)
2009年4月 (2)
2009年3月 (1)
2008年11月 (3)
2008年10月 (2)
2008年8月 (2)
2008年7月 (1)
2008年6月 (2)
2008年4月 (1)
2008年3月 (26)
2008年1月 (1)
2007年12月 (1)
2007年11月 (1)
2007年8月 (6)
2007年7月 (8)
2007年6月 (5)
2007年5月 (16)
2007年4月 (12)
2007年3月 (13)
2007年2月 (8)
2007年1月 (4)
2006年10月 (1)
2006年9月 (1)
2006年8月 (1)
2006年7月 (1)
2006年6月 (2)
2006年5月 (4)
2006年4月 (3)
2006年3月 (2)
2006年2月 (1)
2006年1月 (19)
2005年12月 (2)
2005年9月 (3)
2005年6月 (4)
2005年5月 (11)
2005年4月 (27)
2005年3月 (38)
2005年2月 (7)
Domestic
Michael Chen’s Blog
临海观潮
兔八哥的狗窝
Foreign
搜索
积分与排名
积分 - 487775
排名 - 104
最新评论
1. re: 谈谈基于Kerberos的Windows Network Authentication zz[未登录]
真好!!!!!!!!!!!!!!!!!!
看的我都想给博主打钱了。
--test
2. re: 谈谈基于Kerberos的Windows Network Authentication zz
赞!写得很好。
--asir
3. re: Java Thread.interrupt 害人! 中断JAVA线程(zz)[未登录]
@编程浪子
哈哈,你想的太简单了...你睡眠的时候interrupt不一定刚好命中你.所以你还是永远结束不了.
--码魂
4. re: 谈谈基于Kerberos的Windows Network Authentication zz
好是好,就是错别字太他妈的多了。
--路人
5. re: Java Thread.interrupt 害人! 中断JAVA线程(zz)[未登录]
评论内容较长,点击标题查看
--编程浪子
6. re: Java Thread.interrupt 害人! 中断JAVA线程(zz)
楼主举的例子循序渐进的,讲得很明白
--刘三
7. re: Java Thread.interrupt 害人! 中断JAVA线程(zz)
评论内容较长,点击标题查看
--question
8. re: Java Thread.interrupt 害人! 中断JAVA线程(zz)
评论内容较长,点击标题查看
--graykeel
9. re: 谈谈基于Kerberos的Windows Network Authentication zz
@陈朝对的 好像Q要改为P
--马根
10. re: 工作流之大局势
真的好细致,专业,能给我发一份国内的么?cayh2008@foxmail.com
--cayh
11. re: Java Thread.interrupt 害人! 中断JAVA线程(zz)
好文章必须赞,根据您的办法果然解决了一个大问题!!
--toney
12. re: 谈谈基于Kerberos的Windows Network Authentication zz
你好,请教个问题:windows是如何保证KDC是可信的?安全的?如何保证MasterKey不被泄露?
--brad
13. re: WebLogic教程:在WebLogic Server中集成Apache Poi
fa
--fs
14. re: Java Thread.interrupt 害人! 中断JAVA线程(zz)
说了一些基本的东西哦..呵呵.不过也不错
--红泪
15. re: 汉字简体繁体转换(zz)
寻找那个她
--个v
16. re: JVM参数调优实践 xx
评论内容较长,点击标题查看
--萧工
17. re: Java Thread.interrupt 害人! 中断JAVA线程(zz)
评论内容较长,点击标题查看
--谁不可以
18. re: Java Thread.interrupt 害人! 中断JAVA线程(zz)
评论内容较长,点击标题查看
--谁不可以
19. re: Java Thread.interrupt 害人! 中断JAVA线程(zz)[未登录]
@客人
我觉的很厉害了,咋还不够透,要不你讲透彻一点,我最近就是要中断一个等待另外一个系统,返回值的线程,可能网络丢失,那个线程卡在那了,现在要关闭当前的,重新启动一个该线程。
--lz
20. re: 日本电视台:
KEYHOLETV 百度上能搜到
--琨
阅读排行榜
1. Java Thread.interrupt 害人! 中断JAVA线程(zz)(38602)
2. 谈谈基于Kerberos的Windows Network Authentication zz(10759)
3. Spring IDE的使用(10000)
4. 工作流之大局势(9602)
5. hibernate transaction theory(2)(7624)
6. 大嘴日语的破解(6913)
7. Spring JDBC DAO的两个example(6243)
8. 标准日本语中级视频下载(5701)
9. [C++]static全局变量/全局变量,static函数/普通函数,函数中static变量/函数中的变量,类中的static成员变量/普通类成员变量 (zz)(5064)
10. 日本語 EUC ・シフト JIS 間コード変換仕様とコード系実態調査(4977)
11. 再给一个“访问屏蔽网站”的方法(4605)
12. 超强的上海空姐(4369)
13. Windows CMD Console 字符集的修改(4189)
14. Spring封装Hibernate(4121)
15. 人员、资源、操作及这三者构成的权限控制(4047)
16. SiteMesh:一个优于Apache Tiles的Web页面布局、装饰框架 zz(3810)
17. Magic Maven( Translation part 1) (3609)
18. 从浪漫到流行---法语香颂(Chanson)百年纵览(zz)(3595)
19. 使用JMeter进行性能测试(3525)
20. 汉字简体繁体转换(zz)(3327)
评论排行榜
1. 大嘴日语的破解(45)
2. 汉字简体繁体转换(zz)(26)
3. 工作流之大局势(24)
4. 谈谈基于Kerberos的Windows Network Authentication zz(24)
5. Java Thread.interrupt 害人! 中断JAVA线程(zz)(12)
6. 成功窃取一个小网站 :)(12)
7. 标准日本语中级视频下载(11)
8. jlpt.etest.edu.cn 运行过程中出现的一点内容(7)
9. 第一眼是错的(zz)(5)
10. Checked Exception VS UnChecked Excetion (续2)(5)
11. 人员、资源、操作及这三者构成的权限控制(5)
12. Magic Maven translation release发布(5)
13. hibernatesynch的安装与使用(4)
14. 利用Java实现串口全双工通讯(zz)(4)
15. 可怜的Eclipse(4)
16. 再给一个“访问屏蔽网站”的方法(4)
17. Checked Exception VS UnChecked Excetion(4)
18. 日本电视台:(4)
19. Window+GCC+CDT用Eclipse開發C、C++ (zz)(3)
20. 收藏一个站点 http://www.open-open.com/ (3)
多站点整合—单点登录简单方案 zz
http://www.yaosansi.com/post/1218.html
问题描述:在一个比较复杂的网站环境下。有多个产品向外提供服务。每个产品下都有自己的用户登录界面。现在需要设计一个统一的登录界面。当用户在这个界面登录后就可以自由的使用各个产品和服务。同时意味着用户用一个帐号可以在不同服务里登录,另一方面就是在一个服务里面登录后可以无障碍的漫游到其他服务里面去。
实际应用:Sohu的Passport将focus.cn,17173.com,sogou.com,chinaren.com这四个域名下的产品全部整合在一起了。用户在这四个站点中任何一个地方都可以登录。当用户登录后可以自由的使用其他域名下的服务。现在很多网站上都有bbs blog album服务。这些服务一般也是自己维护自己的用户信息。当发展到一定时候,也需要一个Passport机制整合所有服务,使用户可以单点登录。
Sohu的实现方案
在
http://passport.sohu.com/
登录后 fiddler可以拦截到如下的返回信息:
由于passport.sohu.com的登录界面使用了iframe隐藏提交。所以页面没有看到刷新。隐藏的iframe把用户名和加密的password和其他信息发送给了passport.sohu.com。passport.sohu.com在Response中设置了成功登录的cookie。这个cookie可以证实这个用户成功登录了passport.sohu.com。
当用户在Passport成功登录后。客户端的Javascript根据成功登录的标志,操作iframe请求
http://passport.sohu.com/sso/crossdomain_all.jsp?action=login
因为在同一个域名下,没有跨域,在这次请求中,上次成功登陆的cookie会被一并带着回去。服务器端检查到成功登录的cookie后会Render回一段同时登录多个站点的html。
这段html 要向4个地址发送请求。截至到现在都是在相同的Domain(passport.sohu.com)请求和返回,为真正的跨站点登录做准备,真正的跨站点登录还没有开始。下面passport.sohu.com通过sso/crossdomain.jsp 在服务器端进行Redirect 设置http head 为302进行跳转。跳转后在这个跳转后的域名下设置登录成功的cookie。这就是sohu实现跨站点登录的核心过程。下面是passport.sohu.com登录17173.com的过程。
1. 通过
http://passport.sohu.com/sso/crossdomain_all.jsp?action=login
Render回来的script <script type="text/javascript" src="
http://passport.sohu.com/sso/crossdomain.jsp?action=login&domain=17173.com"></script>
请求同域下的
http://passport.sohu.com/sso/crossdomain.jsp?action=login&domain=17173.com
这时passport.sohu.com下成功登录的cookie会被带回去。
2. 服务器看到成功登录的Cookie后。在服务器端计算出一个加密后的17173.com的登录Url,并Redirect到这个Url。
3. 17173.com从url的QueryString中取得信息。并在Response中设置Cookie。这个Cookie终于写到了17173.com下。而不是passport.sohu.com下。从而使得用户在17173.com下登录。其实用户在17173.com下手动登录也是写上同样的Cookie。以后用户再访问17173.com的页面时这个Cookie会被带回去。这就表示用户在17173.com下成功登录过了。
经过上面的步骤。用户在passport.sohu.com下登录的同时也在其他站点登录了。
在上面的过程中,最核心的技巧就是在指定的域下写入想要的Cookie:
1. Sohu使用了在同一个域名登录后通过再次请求这个域名下某个链接后,得到要登录站点的请求Url,通过javascript使隐藏的iframe请求要登录站点的Url,服务器端接到请求Redirect到要登录站点,然后通过Response写入Cookie,完成跨域名写Cookie的操作。这种写Cookie的方式,需要在跳转时对请求的QueryString进行加密。接受方需要对QueryString进行解密。
2. 这种做法在服务器端不需要特别的处理。只要写好相应Post操作 WriteCookie操作 Redirect操作 就可以了。在FireFox下就可以正常工作了。但是在IE下写Cookie的操作还不行,总是写不进去Cookie。需要在Response中加入一段特别的Header. P3P: CP="CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"
这个Http Header 是P3P安全的要求。P3P的详解
http://www.oreilly.com.cn/book.php?bn=7-302-07170-5
微软对这个的解释:
http://support.microsoft.com/default.aspx?scid=KB;EN-US;Q323752
一个更加轻量级的方案
Sohu的通行证方案已经可以轻松的将各个域名下的用户都同步登录了。但是在实现上Sohu会让客户端的浏览器请求两次passport.sohu.com。在第二次得到一个登录多个站点的地址列表。在第三次请求时通过本域下的cookie进行身份验证,最后在服务器端跳转到一个含有加密Key的其它域名的Url地址,最终写入登录成功的Cookie。除去最开始的登录,要求用户在登录后再进行两次请求。并且服务器端要再做一次跳转。Sohu的做法可能由于Sohu服务器环境和数据存储的结构所决定。
其实总共只需一次登录请求,和每个域名下一次请求就可以完成多站点登录了,同时也不需要服务器端的跳转。
跨站点的请求由script的src发出。各个域名下的ssologin处理QueryString中的key,解密key,验证Key的合法性。在Response中写入登录成功的Cookie。完成跨站点Cookie的写入。
两种方案的比较
1. Sohu使用的登录方式,请求次数多,但是每次请求都有对应的验证过程,在服务端跳转时,重要的跳转Url地址在HttpHeader中,使得跳转地址更加安全,使得用户在跨域登录时非常安全可靠。
2. 轻量级方案的登录方式,请求次数少,没有服务器端的跳转,对服务器压力小。但是需要对Key进行加密解密。跳转的Url会在Response的Http Body中Render给用户。在使用轻量级方案的时候,最好在Key中加上时间戳,过期时间设置为3分钟。Key过期认为这个Key是非法Key,不在Response中写入登录成功的Cookie。
posted on 2010-04-16 14:31
jinfeng_wang
阅读(1876)
评论(0)
编辑
收藏
所属分类:
website
新用户注册
刷新评论列表
只有注册用户
登录
后才能发表评论。
网站导航:
博客园
IT新闻
Chat2DB
C++博客
博问
管理
相关文章:
谈谈网站静态化 zz
多站点整合—单点登录简单方案 zz
亿万用户网站MySpace的成功秘密 zz
Web 2.0网站性能调优实践 zz
网络服务器设计的模型及一些设计方法zz
Network Programming Using Libevent zz
亿级数据的高并发通用搜索引擎架构设计zz
用rsync实现网站镜像和备份 zz
Powered by:
BlogJava
Copyright © jinfeng_wang