OMG,到底在尋找什么..................
          (構造一個完美的J2EE系統所需要的完整知識體系)
          posts - 198,  comments - 37,  trackbacks - 0

          ?原貼地址: http://yuwang881.blog.sohu.com/3632369.html
          在我寫了SSO的文章以后,有幾個網友希望我能提一提跨domain的SSO的實現方法。其實,它的實現方法有很多,如果不象JES Access Manager那樣要考慮性能和安全性的問題,我下面可以給出很簡單的解決方案。

          跨domain的SSO的主要難點在于瀏覽器如何設置不同domain的cookie。所有的cookie都有一個范圍,叫domain,如“.sun.com”。這個范圍規定了只有在訪問相同domain的時候,瀏覽器才會將此cookie帶上。因此,如果SSO服務的domain和Web應用的domain不相同的情況下,就算當前瀏覽器已經登錄過SSO的服務,Web應用的Agent(Filter)也不能知道。因為SSO服務給此瀏覽器設置的cookie是Domain A的,在訪問domain B的時候,這個cookie是不會帶去的。

          另外,在servlet的API中,在設置cookie的時候是可以選擇此cookie生效的domain--setDomain()方法。知道這個以后,請看下圖的解釋

          10c86bad976.jpg

          如上圖,我們只需要將SSO服務稍微改動就能完成跨domain的SSO的功能。

          讓我們一步步來看是如何實現的:通過步驟1、2,假設我們訪問過Domain A中的應用1,并且登錄了SSO,獲得了Domain A的cookie。步驟3在訪問Domain B的應用2的時候,顯然此Web應用2的Agent不會發現這個cookie,因為這是Domain B。

          步驟4,Web應用2的Agent給瀏覽器發出重新定向到SSO登錄頁面的指令(詳細過程和原理請閱讀文章本身)。步驟5,瀏覽器去訪問SSO的登錄頁面。到此為止,和原來的實現過程都沒有什么變化。

          但是,SSO在返回給瀏覽器登錄頁面之前,可以執行一個附加的操作,檢查一下當前請求是否帶有cookie。值得注意的是,在這次訪問當中,瀏覽器的確是將先前登錄成功的cookie帶來了,因為這是Domain A。在這個附加的操作中,我們可以去判斷這個cookie是否真的有效。

          如果這個cookie真的有效,這個附加的操作需要做的是給瀏覽器再設置一個cookie,cookie的名字和數值都和原來一樣,domain的范圍設置為"Domain B",并且讓瀏覽器重新定向到剛才的請求上(Web應用2的請求)。這個請求的URL可以從“goto”的參數中獲得(詳細過程和原理請閱讀文章本身)。

          瀏覽器再次訪問Web應用2的時候,它所希望的cookie就已經在了。

          從用戶的角度說,可能會發現瀏覽器有幾次閃動和交互,但這都是自動的。

          posted on 2006-09-12 15:43 OMG 閱讀(322) 評論(0)  編輯  收藏 所屬分類: <項目>系統集成

          <2006年9月>
          272829303112
          3456789
          10111213141516
          17181920212223
          24252627282930
          1234567

          常用鏈接

          留言簿(1)

          隨筆分類

          隨筆檔案

          IT風云人物

          文檔

          朋友

          相冊

          經典網站

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 宜川县| 洛阳市| 阳城县| 奉新县| 二连浩特市| 大悟县| 商都县| 资中县| 合江县| 鄯善县| 通州市| 望江县| 都昌县| 扬中市| 西乌| 色达县| 莱芜市| 武乡县| 延川县| 滦南县| 高清| 彭州市| 中牟县| 县级市| 灌南县| 绥阳县| 白山市| 凤翔县| 永嘉县| 鄂州市| 潼关县| 河北区| 咸丰县| 丘北县| 丰宁| 手机| 乌兰察布市| 上林县| 古蔺县| 镇远县| 会同县|