18

example.com の異なるサブドメインでホストされている複数の Rails (v3.2) アプリにシングル サインオン ソリューションを実装しようとしています。

1 つのアプリは ID プロバイダーとして機能し、認証に devise を使用し、users.example.com に配置されます。他のアプリは認証に ID プロバイダーに依存し、[app1.example.com, app2.example のドメインで devise+omniauth を使用します。 .com、および example.com]。このブログエントリは、私の実装の多くに影響を与えました: http://blog.joshsoftware.com/2010/12/16/multiple-applications-with-devise-omniauth-and-single-sign-on/

正常に動作していますが、セッションが共有されていないという問題が残っているため、ID プロバイダーにログインした後も、認証のために他の各アプリから呼び出しを行う必要があります。ユーザー。

secret_token.rb で同じシークレット トークン、session_store.rb と :domain => :all で同じセッション キーを使用してみました (値として「.example.com」と「example.com」も試しました)。まだ運がありません。

上記を実行すると、ID プロバイダーにログインした後、セッション変数「warden.user.user.key」が設定されていることを session.inspect で確認できます。すぐに app1.example.com のアプリに移動すると、session.inspect には同じ session_id と _csrf_token が表示されますが、「warden.user.user.key」変数が欠落しています。

何かばかげたことを見逃しているような気がします..何か考えはありますか?

4

1 に答える 1

3

あなたに答えるサブドメイン全体で単一のCookieを機能させることについて、別のSOの質問があると思います:

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

また、セッション ストアとして dalli と memcached で memcached クラスターを使用することも同様に機能すると想像できます。

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

ただし、アプリケーションの目的では、最初のソリューションの方が理にかなっています。

于 2013-09-03T23:16:40.790 に答える