小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

多站點整合—單點登錄簡單方案

 minwh 2010-04-25
問題描述:在一個比較復(fù)雜的網(wǎng)站環(huán)境下。有多個產(chǎn)品向外提供服務(wù)。每個產(chǎn)品下都有自己的用戶登錄界面。現(xiàn)在需要設(shè)計一個統(tǒng)一的登錄界面。當(dāng)用戶在這個界面登錄后就可以自由的使用各個產(chǎn)品和服務(wù)。同時意味著用戶用一個賬號可以在不同服務(wù)里登錄,另一方面就是在一個服務(wù)里面登錄后可以無障礙的漫游到其他服務(wù)里面去。

實際應(yīng)用:Sohu的Passport將focus.cn,17173.com,sogou.com,chinaren.com這四個域名下的產(chǎn)品全部整合在一起了。用戶在這四個站點中任何一個地方都可以登錄。當(dāng)用戶登錄后可以自由的使用其他域名下的服務(wù)?,F(xiàn)在很多網(wǎng)站上都有bbs blog album服務(wù)。這些服務(wù)一般也是自己維護(hù)自己的用戶信息。當(dāng)發(fā)展到一定時候,也需要一個Passport機(jī)制整合所有服務(wù),使用戶可以單點登錄。

Sohu的實現(xiàn)方案
http://passport.sohu.com/ 登錄后 fiddler可以攔截到如下的返回信息:



由于passport.sohu.com的登錄界面使用了iframe隱藏提交。所以頁面沒有看到刷新。隱藏的iframe把用戶名和加密的password和其他信息發(fā)送給了passport.sohu.com。passport.sohu.com在Response中設(shè)置了成功登錄的cookie。這個cookie可以證實這個用戶成功登錄了passport.sohu.com。



當(dāng)用戶在Passport成功登錄后。客戶端的Javascript根據(jù)成功登錄的標(biāo)志,操作iframe請求http://passport.sohu.com/sso/crossdomain_all.jsp?action=login 因為在同一個域名下,沒有跨域,在這次請求中,上次成功登陸的cookie會被一并帶著回去。服務(wù)器端檢查到成功登錄的cookie后會Render回一段同時登錄多個站點的html。



這段html 要向4個地址發(fā)送請求。截至到現(xiàn)在都是在相同的Domain(passport.sohu.com)請求和返回,為真正的跨站點登錄做準(zhǔn)備,真正的跨站點登錄還沒有開始。下面passport.sohu.com通過sso/crossdomain.jsp 在服務(wù)器端進(jìn)行Redirect 設(shè)置http head 為302進(jìn)行跳轉(zhuǎn)。跳轉(zhuǎn)后在這個跳轉(zhuǎn)后的域名下設(shè)置登錄成功的cookie。這就是sohu實現(xiàn)跨站點登錄的核心過程。下面是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.  服務(wù)器看到成功登錄的Cookie后。在服務(wù)器端計算出一個加密后的17173.com的登錄Url,并Redirect到這個Url。



3.  17173.com從url的QueryString中取得信息。并在Response中設(shè)置Cookie。這個Cookie終于寫到了17173.com下。而不是passport.sohu.com下。從而使得用戶在17173.com下登錄。其實用戶在17173.com下手動登錄也是寫上同樣的Cookie。以后用戶再訪問17173.com的頁面時這個Cookie會被帶回去。這就表示用戶在17173.com下成功登錄過了。



經(jīng)過上面的步驟。用戶在passport.sohu.com下登錄的同時也在其他站點登錄了。

在上面的過程中,最核心的技巧就是在指定的域下寫入想要的Cookie:

1.  Sohu使用了在同一個域名登錄后通過再次請求這個域名下某個鏈接后,得到要登錄站點的請求Url,通過javascript使隱藏的iframe請求要登錄站點的Url,服務(wù)器端接到請求Redirect到要登錄站點,然后通過Response寫入Cookie,完成跨域名寫Cookie的操作。這種寫Cookie的方式,需要在跳轉(zhuǎn)時對請求的QueryString進(jìn)行加密。接受方需要對QueryString進(jìn)行解密。

2.  這種做法在服務(wù)器端不需要特別的處理。只要寫好相應(yīng)Post操作 WriteCookie操作 Redirect操作 就可以了。在FireFox下就可以正常工作了。但是在IE下寫Cookie的操作還不行,總是寫不進(jìn)去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./book.php?bn=7-302-07170-5
微軟對這個的解釋:http://support.microsoft.com/default.aspx?scid=KB;EN-US;Q323752

一個更加輕量級的方案

Sohu的通行證方案已經(jīng)可以輕松的將各個域名下的用戶都同步登錄了。但是在實現(xiàn)上Sohu會讓客戶端的瀏覽器請求兩次passport.sohu.com。在第二次得到一個登錄多個站點的地址列表。在第三次請求時通過本域下的cookie進(jìn)行身份驗證,最后在服務(wù)器端跳轉(zhuǎn)到一個含有加密Key的其它域名的Url地址,最終寫入登錄成功的Cookie。除去最開始的登錄,要求用戶在登錄后再進(jìn)行兩次請求。并且服務(wù)器端要再做一次跳轉(zhuǎn)。Sohu的做法可能由于Sohu服務(wù)器環(huán)境和數(shù)據(jù)存儲的結(jié)構(gòu)所決定。

其實總共只需一次登錄請求,和每個域名下一次請求就可以完成多站點登錄了,同時也不需要服務(wù)器端的跳轉(zhuǎn)。



跨站點的請求由script的src發(fā)出。各個域名下的ssologin處理QueryString中的key,解密key,驗證Key的合法性。在Response中寫入登錄成功的Cookie。完成跨站點Cookie的寫入。

兩種方案的比較

1. Sohu使用的登錄方式,請求次數(shù)多,但是每次請求都有對應(yīng)的驗證過程,在服務(wù)端跳轉(zhuǎn)時,重要的跳轉(zhuǎn)Url地址在HttpHeader中,使得跳轉(zhuǎn)地址更加安全,使得用戶在跨域登錄時非常安全可靠。

2. 輕量級方案的登錄方式,請求次數(shù)少,沒有服務(wù)器端的跳轉(zhuǎn),對服務(wù)器壓力小。但是需要對Key進(jìn)行加密解密。跳轉(zhuǎn)的Url會在Response的Http Body中Render給用戶。在使用輕量級方案的時候,最好在Key中加上時間戳,過期時間設(shè)置為3分鐘。Key過期認(rèn)為這個Key是非法Key,不在Response中寫入登錄成功的Cookie。

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多