2013-05-01 8 views
17

私は、複数のレール(V3.2)用のシングルサインオンソリューションを実装しようとしていますが共有セッションは、全体で

1つのアプリがアイデンティティとして機能example.comの異なるサブドメインでホストされるアプリケーション別のサブドメインでアプリをレールプロバイダは、認証のためにdeviseを使用し、users.example.comに座っています 他のアプリケーションは、認証のためにIDプロバイダに依存しており、[app1.example.com、app2.example.com、およびexampleのドメインを持つdevise + omniauthを使用します.com]。 このブログのエントリは私の実装の多くのインスピレーションを得た:私はそれが正常に動作しますが、問題は、私はアイデンティティプロバイダにログイン後のように、セッションが共有されていないことに変わりはない持ってhttp://blog.joshsoftware.com/2010/12/16/multiple-applications-with-devise-omniauth-and-single-sign-on/

を、私はまだ、それぞれからの呼び出しを行う必要があり認証するための他のアプリのうち、私はこれをユーザーには見えないようにする必要があります。

私はsecret_token.rbでsession_store.rbと同じセッションキーと:domain =>:all(同じく値として'example.com 'と' example.com 'を試してみました)を使ってみました。まだ運がありません。

上記を実行すると、アイデンティティプロバイダのログイン後にセッション変数 "warden.user.user.key"に値が設定されることがsession.inspectに表示されます。 app1.example.comのアプリケーションにすぐに行くと、session.inspectには同じsession_idと_csrf_tokenが表示されますが、 "warden.user.user.key"変数が欠落しています。

私は何か愚かなものを見逃しているように感じる。

+0

この問題を解決できましたか?私は同じことを正確に達成しようとしています。 – Jakcst

+0

'user.key'はクッキーのどこかに保存されていますか?クッキードメインが* .example.comに設定されておらず、users.example.comに設定されている可能性がありますか? (編集:入力を早めに入力してください) セッションを確認するために別々のすべてのアプリが 'users.example.com'を押しますか?言い換えれば、 'app1.example.com'は少なくともあなたのシステムの理解の下で、どのようにセッションを検証しますか?セッションはどこに保存されていますか?共有DB? – dbalatero

答えて

3

私はあなたに答えるでしょうサブドメイン間で動作する単一のクッキーを得ることについて、別のSOの質問があると思い:

https://stackoverflow.com/a/10403338/2573896

また、私はあなたのようdalliとmemcachedのとmemcachedのクラスタを使用していることを想像することができますが、セッションストアも同様に動作します:アプリケーションの目的のために

http://awesomerails.wordpress.com/2011/08/23/rails-3-memcached-session-store/

は、最初のソリューションは、しかし、より理にかなっています。

関連する問題