2012-03-21 28 views
2

我正在整合Rails和我公司的SSO系統。我的服務器上安裝並啓用了SiteMinder Apache模塊。Rails會話和SiteMinder/SSO

Rails應用程序檢查before_filter中的請求對象以確定用戶是否已通過SSO進行身份驗證。在找到所需的變量後,我的應用程序會將從SSO返回的用戶標識與其內部的用戶帳戶進行匹配,然後對該用戶進行身份驗證(使用ActiveRecord會話存儲進行平穩身份驗證)。

我的問題是這樣的:成功登錄後使用這種方法,在幾個頁面值得點擊後,我突然丟失我的Rails會話,並因此我的應用程序重新認證(我回到了主頁)。

這不是CSRF保護的結果,因爲它:

  1. 同時出現在我的應用程序的測試和生產環境(和它在默認情況下,測試環境關閉),並
  2. 無論請求類型如何,看起來都是隨機的:AJAX,GET和POST請求都導致了這種行爲。

即使我禁用是基於其SSO ID自動登錄的用戶,只是打在我的應用程序的舊登錄頁面(通過SSO認證後)的代碼,我注意到,每隔一段時間一個出現我瀏覽器cookie中的新會話ID值。

因此,當我打開我的Apache SSO模塊時會話正在重置。否則,一切都很好,很棒。是什麼賦予了?

回答

0

Rails會話(像幾乎所有的Web應用程序會話)都由cookie進行跟蹤。即使您使用的是AR會話存儲,仍然會有一個包含sessionID的cookie,這是Web應用程序跟蹤會話的唯一方式。如果瀏覽器丟失或刪除了Cookie,則會丟失會話。

或者,如果您有一些Rails代碼調用#reset_session控制器方法。或者可以自己實際修改#cookies哈希來刪除會話標識cookie(但你永遠不想)。

從您提供的信息中,我無​​法確定是什麼原因導致會話丟失。但是這些是開始尋找的地方。如果您可以重現問題,那麼請在會話「丟失」之前和之後查看您的Cookie。您可以使用它自己的接口在瀏覽器中查看Cookie,或者在控制器或視圖中從#cookies方法返回的哈希中使用rails應用程序(使用調試器,甚至輸出到頁面進行調試)。他們何時/如何/爲何要改變?

聽起來像您懷疑SSO模塊正在刪除您的與軌道相關的cookie。這可能是SiteMinder支持的問題,而不是Rails問題。

+0

我監視我的Rails會話cookie的內容,在Firefox,而多次擊中頁面。 Cookie **的內容確實發生了變化,因此此時我想知道是什麼原因導致Rails決定重置Cookie。不同的起源IP?如果請求看起來「被篡改」(雖然我不認爲SSO模塊正在篡改我的Rails會話cookie的_contents_)? 謝謝你的建議。我已經將這個問題提交給SiteMinder人員,並且沒有骰子。 – 2012-03-29 14:41:51

0

嘗試增加POST,PUT,GET,DELETE,等來的SiteMinder