2014-03-24 46 views
0

我需要設置一個主站點,將站點1和站點2嵌入到iframe中,登錄並在其中啓動用戶會話。如何在iframe中啓動有效的用戶會話

站點1(RoR)和站點2(未知框架)已獲得自己的身份驗證(用戶名,密碼,Cookie,通常的框架安全性)。

主站點(PHP)服務器可以直接訪問站點1數據庫,並且我知道密碼散列算法,因此我可以根據站點1驗證主站點的登錄密碼。站點2可以根據需要更改他們的密碼,但是沒有訪問分貝和框架。

不幸的是,我無法在網站1或網站2中更改任何內容。儘管對Site 1有完整的讀取權限,但我只能圍繞它建立。

我已經勾勒出快速圖表,以便更好地說明我的意思/需要:

a busy cat http://gettaxi.me/public_img/help.png

我要開始一個iframe中的用戶會話。站點1的登錄憑證與主站點的登錄憑證相同,因爲它們來自同一個數據庫,站點2的憑證將假定爲相同(如果不是,則可能僅顯示登錄失敗)。

理念名單至今:

  1. 我可以記錄登錄憑證到主站點的cookie,並用它來填充的iframe領域。也許存儲加密版本並在需要時解密?但是,在cookie中存儲密碼(甚至是加密的)似乎是荒謬的。

  2. 同上,但將其存儲在主站點會話變量中。

  3. 跨域餅乾的想法顯得有些蒼白無力,因爲在這裏每個站點都有設置它自己的會話cookie,一個網站不能將其設置爲另一個...

我從來沒有處理與之前的任何跨域類似。所以在我開始編寫像瘋子這樣的東西的時候,可能會也可能不會工作 - 我會向您尋求幫助和建議!你將如何去完成這個?這可能嗎?

其他問題:

  1. 不要通過網站1和2的iframe中設置cookie的行爲一樣嗎?它們是否持久?如果我以後在iframe中打開同一個網站,它們會被接受嗎?

  2. 如果存儲憑據(cookie/session)是唯一的方法:我將如何填充iframe中的登錄字段並提交表單? javascipt的?一些整潔的GET/POST /重定向技巧?

在此先感謝!

+0

您是否至少在意解釋downvote? –

+1

大多數人都會在「你會怎麼樣」這樣的問題上廢話......除非他們被高代表問過,然後他們完全沒問題。就像對人們進行批評和發表無關話題一樣。有了這個社區的集體編碼智能和這些問題的頻率被看到,然後再一次被濫用,也許權力的某個人會意識到SO的代碼審查部分並沒有吸引人。也許只是一個理解的事情,但如果他們改變了它的話,忠實的人不會拖曳橋樑並打擊人們的手。我們都知道不會發生:) – Mattt

+0

因此,我upvote你先生!我認爲這是一個非常深思熟慮的問題,因爲過去我有類似的任務,所以我很高興看到迴應。 – Mattt

回答

1

好的,結果很簡單。並堅持它downvoters ...面對 - 我會在這裏發佈我自己的解決方案,誰知道,也許有人會覺得它有用。

  1. 用戶登錄到主站點
  2. 驗證憑據
  3. 生成隨機客戶端令牌
  4. 加密與該令牌的密碼和密碼保存在session變量
  5. 設置cookie和商店用戶瀏覽器中的令牌

jQuery單擊鏈接到站點1或2時的操作:

  1. 發送一個Ajax請求的服務器與該令牌
  2. 驗證用戶會話,併成功
  3. 解密存儲密碼,將密碼發送回客戶端和預填充隱藏形式的用戶名和密碼字段模仿的iframe網站的登錄表單
  4. 提交該表格與target="iframe"
  5. 清除那些形式的預先填充表單字段

Vuala,工作跨域IFRAME自動登錄...

當然還有更多的事情喜歡隱藏,取消隱藏按鈕點擊,會話超時,div的令牌到期後續約的任何用戶的行爲等等,但主要的是它的工作原理!是的,密碼以純文本格式發送3次,但無論如何這些網站都沒有HTTPS。密碼也不以明文存儲。

更新:

輪輻太快。當iframe內容返回Access-Control-Allow-Origin標題時,IE和Safari會出現問題。他們更強大的安全政策謹慎對待iframe內容,並且不允許保存會話cookie。它可以通過在IE中刪除隱私設置來修復,在Safari中允許使用第三方Cookie,或者只是檢測瀏覽器,如果它是上述之一 - 在新標籤頁/窗口中打開它。

否則,在Chrome,Firefox,Opera和Maxthon中工作正常

相關問題