2009-01-29 51 views
0

我需要爲一個客戶端構建幾個Rails應用程序。我想給他們所有相同的用戶認證系統,以便用戶不必記住每個應用的單獨登錄憑證。這些都是嚴格的內部應用。 OpenID不適用於此組織。如何讓幾個應用程序使用相同的認證系統?

我正在考慮創建一箇中央Rails應用程序來處理認證。其他應用程序將採用提交的用戶標識和密碼,並向auth應用程序發送請求,並返回一個描述用戶及其角色的YAML字符串。

這是一個合理的方法嗎?

是否有我應該注意的這個問題的標準解決方案?

(請注意,由於組織約束我有一個使用RedHat Linux下5服務器運行MySQL,Apache和Rails的解決這個我自己。)

回答

3

聽起來合理的給我。我可能會按照您的描述自行設置身份驗證應用程序,然後在客戶端應用程序中使用ActiveResource作爲Web服務訪問身份驗證。你基本上可以擁有自己的內部OpenID風格的系統。

如果您之前沒有使用ActiveResource,Railscasts 9495是一個很好的開始。

1

這實際上聽起來像一個合理的方法。有很多rails plugins處理身份驗證相當好。您可以通過您自己的自定義身份驗證方法公開該功能,以通過Web服務調用。

如果你想變得很花哨,你可以使用HTTParty編寫一個API到你的Rails(認證)應用程序,並與其他人共享。

2

這聽起來像你真正想要的是一個單一登錄系統,而不是一個共享的憑證系統。關鍵區別在於,對於後者,用戶將不得不對每個應用程序重新進行身份驗證,而對於前者,他只需登錄一次,然後在應用程序之間無縫移動。

不幸的是,將它與你的rails應用程序集成是一件有趣的工作。這裏有一個很好的出發點: http://www.ja-sig.org/products/cas/

1

OpenID的建成將分散的,所以你可能其實內部使用host your own OpenID提供商。如果你走的是類似的路線,我認爲不需要重新發明輪子。

0

這聽起來不像組織太大,但如果他們有一個LDAP目錄,你可以使用它作爲憑據。儘管如上所述,這不會解決用戶必須單獨登錄到每個應用程序的問題。

1

我有一個瘋狂的解決方案,我一直在考慮我自己的事情,我需要這樣做。

在Rails的默認配置中,它將會話數據作爲cookie發送給最終用戶。大多數情況下,除了已登錄並通過身份驗證的用戶的身份之外,您應該在會話中幾乎沒有任何內容?好的,那麼如果你想要登錄的每個應用都使用config/environment.rb中完全相同的密鑰呢?這是用來簽署cookie的120個字符左右的字符串,以便用戶不能更改cookie並將其發回而不被捕獲。如果您的羣組中的每個應用擁有相同的密鑰,它們都位於同一個域中,那麼所有應用都將獲得相同的cookie,並且所有應用都會相信它們是發送它的那個。每個人都會說:「是的,這是用戶#252,我把這個用戶號碼放到了會話中,所以我知道那就是他,通過獲取它,我知道他/她已經登錄,我可以用它來查找他/她的細節。「

注意:完全披露,我有不是嘗試過,但我有充分的理由相信它會工作。

相關問題