国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 網站 > 建站經驗 > 正文

搜狐單點登陸實現方案

2024-04-25 20:17:08
字體:
來源:轉載
供稿:網友

在一個比較復雜的網站環境下。有多個產品向外提供服務。每個產品下都有自己的用戶登錄界面。現在需要設計一個統一的登錄界面。當用戶在這個界面登錄后就可以自由的使用各個產品和服務。同時意味著用戶用一個帳號可以在不同服務里登錄,另一方面就是在一個服務里面登錄后可以無障礙的漫游到其他服務里面去。

實際應用: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
 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 康保县| 长葛市| 河南省| 蒙山县| 海门市| 云林县| 泰安市| 哈密市| 儋州市| 扎赉特旗| 闽侯县| 满洲里市| 百色市| 乳源| 定州市| 三门县| 习水县| 华容县| 开封县| 琼中| 仁布县| 楚雄市| 龙南县| 保亭| 临沂市| 夏河县| 康马县| 新营市| 彰化县| 东乌珠穆沁旗| 汝城县| 边坝县| 天峨县| 蒙阴县| 河北省| 大荔县| 繁峙县| 辰溪县| 肥东县| 菏泽市| 防城港市|