PHP 中 SOAP 中使用 session 做到 Single Sign On

edited 十一月 -1 in 進階PHP討論
首先,我參考了此篇,成功做出了範例
http://shiang-hui.homelinux.com/read.php?196

Client 在 A 網站,Server 端在 B 網站,但我想要在 SOAP 的 Server 端,同時註冊 B 網站的 session,好像登入 A 網站時,就同時登入 B 網站。

可是 session 怎麼啟動也都沒有用,都是無效的,資料不會被記錄下來。
請問,這個是有辦法實現的嗎?如果沒有,有其他方法嗎?

原始討論: http://twpug.net/x/modules/newbb/viewtopic.php?topic_id=5462

評論

  • edited 十月 2010
    Session 是以 cookie 去儲存 session id
    而 cookie 只能跨子網域 , 如 xxx.com 下可以有 abc.xxx.com , xyz.xxx.com
    但若不同網域就不行了 , 除非使用 P3P 的技術 , 但我的經驗是 Safari 瀏覽器對 P3P 的處理比較複雜

    所以有另一種做法比較簡單 , 如下方式

    ClientA 的程式必須要有辦法新增一個臨時的識別資料於 ServerB 的資料庫內

    ClientA 的程式可於輸出時增加一個
    這個 login.php 可以根據 $_GET['token'] 來比對資料庫看是否有符合的臨時識別資料
    如果有 , 就去執行登入的程式碼 , 並輸出空白資料即可
    這樣就可以做到 ServerB 自動登入了
  • edited 十月 2010
    @pigo
    所以說破了是通過database去驗證?這樣?
  • edited 十月 2010
    是有想過,但 Server B 的資料庫,原則上是不開放給 Client A 的。
    所以才會透過 SOAP。
    同時,如果用一個暫存資料庫的 key 來作確認,也會增加安全上的困擾。
    我爬文好久了,不知道有沒有大大可以解決?是不是真的使用 SOAP,在 Server 端的 SOAP 就不能使用 $_SESSION 呢?
  • edited 十月 2010
    pigo 提到的形式應該是比較常見的實作方式,跟使用 $_SESSION 在架構上類似,要說安全性,好像沒有太大差異

    暫存的 key 可以加入更多條件,像是來源 IP 、 5 分鐘內沒有動作就失效或是必須搭配特定數值雜湊後送出都可以降低安全風險。
  • edited 十月 2010


    dale 寫道:
    是有想過,但 Server B 的資料庫,原則上是不開放給 Client A 的。
    所以才會透過 SOAP。
    同時,如果用一個暫存資料庫的 key 來作確認,也會增加安全上的困擾。
    我爬文好久了,不知道有沒有大大可以解決?是不是真的使用 SOAP,在 Server 端的 SOAP 就不能使用 $_SESSION 呢?

    ServerB 可以寫一支 SoapServer 專門取得一組暫時授權碼
    ServerA 在作登入的動作之後 , 也呼叫 ServerB 去取得授權碼 , 這組授權碼只能維持 20 秒就很安全
    然後於 ClientA 端如上所述加入 區段以此授權碼讓 ServerB 作登入
    此時 ServerB 就會傳出 ServerB 的 session id 給瀏覽器了

    但有個問題是 , 若用戶太久沒在 ServerB 上動作時 , Session 可能會消失
    所以在 ServerA 上面有必要記錄何時取得 ServerB 的授權碼 , 然後於客戶端那邊適時的再用 對 ServerB 作一次 refresh session , 這個 refresh 動作其實在 ServerB 就是呼叫一個 session_start() 就可以繼續保持 Session 囉
  • session 是系統變數,Client 在 A 網站,Server 端在 B 網站 , AB本來就是不同系統,session變數組
    自然是不同,你要不同的系統有相同呢session 變數,那你 A B 得溝通好,如何將session 內的變數copy 到對方系統去,用加密送,去同資料庫取都是方法.
Sign In or Register to comment.