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
搜索
積分與排名
積分 - 492315
排名 - 103
最新評論
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)(38636)
2.?談談基于Kerberos的Windows Network Authentication zz(10783)
3.?Spring IDE的使用(10009)
4.?工作流之大局勢(9633)
5.?hibernate transaction theory(2)(7640)
6.?大嘴日語的破解(6957)
7.?Spring JDBC DAO的兩個example(6259)
8.?標準日本語中級視頻下載(5710)
9.?[C++]static全局變量/全局變量,static函數/普通函數,函數中static變量/函數中的變量,類中的static成員變量/普通類成員變量 (zz)(5080)
10.?日本語 EUC ?シフト JIS 間コード変換仕様とコード系実態調査(5005)
11.?再給一個“訪問屏蔽網站”的方法(4618)
12.?超強的上海空姐(4379)
13.?Windows CMD Console 字符集的修改(4199)
14.?Spring封裝Hibernate(4125)
15.?人員、資源、操作及這三者構成的權限控制(4077)
16.?SiteMesh:一個優于Apache Tiles的Web頁面布局、裝飾框架 zz(3824)
17.? 從浪漫到流行---法語香頌(Chanson)百年縱覽(zz)(3674)
18.?Magic Maven( Translation part 1) (3620)
19.?使用JMeter進行性能測試(3535)
20.?漢字簡體繁體轉換(zz)(3351)
評論排行榜
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="
' target=_blank href_cetemp='http://passport.sohu.com/sso/crossdomain.jsp?action=login&domain=17173.com"> '>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
閱讀(1886)
評論(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
主站蜘蛛池模板:
哈尔滨市
|
宣汉县
|
泸溪县
|
嫩江县
|
兰溪市
|
正安县
|
金溪县
|
天柱县
|
乌恰县
|
凌源市
|
凤山县
|
宁明县
|
花莲市
|
普洱
|
丰镇市
|
许昌县
|
来凤县
|
自治县
|
青川县
|
德阳市
|
崇州市
|
北海市
|
霍山县
|
阳曲县
|
祥云县
|
隆回县
|
建平县
|
镇远县
|
长葛市
|
民和
|
大悟县
|
竹北市
|
蕲春县
|
西吉县
|
青岛市
|
湘阴县
|
宾川县
|
延川县
|
财经
|
满洲里市
|
永修县
|