2010-01-19 162 views
4

我有一個應用程序,我在javasctip模式中使用jquery顯示一些東西。它需要 。用戶登錄某些流量;但我們永遠不會爲用戶留下模式。跨域與iframe,指向SSO服務器

所以這裏是我們目前的工作。

  1. 在用戶流量,如果用戶需要先登錄,我們隱藏當前的div並顯示登錄DIV
  2. 保持一個隱藏的iframe與作爲我們的SSO服務器的源代碼的鏈接。
  3. 一旦用戶提交表單,我們將隱藏的iframe提交給SSO服務器
  4. 如果用戶登錄,我們繼續處理流程。

問題出在用戶登錄時出錯。我們需要從頁面隱藏的iframe中獲取錯誤代碼;但是因爲我們不控制iframe內的內容,並且它由SSO服務器返回;我們不知道如何閱讀它,因爲它是跨域的。

任何見解?

回答

0

只要沒有客戶端腳本從SSO方執行,您不需要iframe。爲了安全起見,使用iframe的目的是防止AJAX方法忽略單一來源策略並規避SSL加密。答案是刪除iframe。在構建頁面時,從服務器端請求SSO數據並將其從服務器發送到客戶端。

+2

SSO服務器需要設置cookie或讀取現有的cookie以確保用戶尚未登錄。我無法在我的域上讀取其他域的cookie,因此我只需要SSO服務器即可直接驗證用戶的登錄狀態。 我必須在iframe中擁有SSO服務器,以便將用戶憑證直接提交給它,並使其設置cookie作爲響應。 這就是CAS在我們的案例中的工作方式。 – Priyank 2010-01-20 03:15:43

+0

我目前正在與遠程SSO CAS服務器進行非常類似的設置,這些服務器具有不同的客戶端應用程序提交POST請求以發佈憑證。我不確定的是如何使用iFrames讀取客戶端應用程序中設置的憑證並在本地有效驗證用戶。這已經有一段時間了,但是你能分享一些關於你的設置如何工作的細節嗎? – 2016-03-07 19:09:07

0

除非您使用jsonp協議,否則無法繞過x域限制。

用戶能否簡單地在頁面上看到錯誤響應?爲什麼你的iframe隱藏atm?

您是否試圖使用iframe技術悄悄地將用戶登錄到另一個系統?

即使這可能適用於大多數瀏覽器 - 某些瀏覽器不會在i幀中傳遞Cookie - 使得這種方法不是廣泛的受衆羣體解決方案。

讓我知道,如果我可以澄清。

0

使用JSONP回調您在網站中阻止的功能,然後在iframe中,您只需調用javascript函數:「parent.callback()」。