1

設定

ユーザーがアカウントに登録するRailsアプリケーションがあり、サブドメインが作成されます。その後、サブドメインに進み、資格情報でログインできます。ワークフローは次のようになります。

  1. ユーザーがベース ドメインにアクセスし、メール/ユーザー名/パスワードおよびサブドメイン フィールドを含むフォームに入力します。
  2. 送信された情報から、サーバーはグローバル/パブリック データベースにアカウントを作成します。次に、サーバーはその特定のサブドメイン/アカウントに固有のデータベースを作成し、ユーザー レコードをそこに保存します。
  3. ユーザーはサブドメインにリダイレクトされ、ログインを求められます。

(注: 個別の「データベース」を実装するために、postgres スキーマを使用していますが、それは無関係である必要があります。)

質問

私の質問はステップ 3 に関するものです。ユーザーにログインを求めるのではなく、ユーザーをサブドメインにリダイレクトして自動的にログインさせたいと考えています。しかし、すべてのサブドメインで単一のセッションを共有したくありません。

どうにかして自動ログイン要求を安全に送信したいと考えています。

考えられる解決策

usersCookie とテーブルに格納する使い捨てのランダム トークンを使用することを検討しました。ユーザーがアカウントを正常に作成すると、サブドメインにリダイレクトされます。その時点で、トークンは消費/破棄され、ユーザーは自動的にログインします。

また、有効期限が切れる前にトークンを使用するための短いウィンドウが必要です。

考え?ありがとう!

4

1 に答える 1

5

同じ問題がありました。セッションがサブドメイン間で共有されていないため、提案された解決策は機能しません。

私は次の方法で解決しました(あなたが提案したのと同じアイデア、異なる実装):

  • user_id とランダムな SHA1 キーを含む新しいモデル (LoginKey と呼びます) を作成します。
  • ユーザーが親ドメイン (例: mydomain.com/users/sign_in) で認証されると、新しい LoginKey が作成され、ユーザーは対応するサブドメインにリダイレクトされ、login_with_key と呼ばれるアクション (例: user_subdomain.mydomain) にリダイレクトされます。 .com/users/login_with_key?key=f6bb001ca50709efb22ba9b897d928086cb5d755322a3278f69be4d4daf54bbb)
  • 提供されたキーを使用して、ユーザーを自動的にログインさせます。

    キー = LoginKey.find_by_login_key(params[:key])

    key.nil でない限り、sign_in(key.user)?

  • キーを破棄します。

    key.destroy

私はこのソリューションが 100% 好きではありませんでした。db レコードの作成を必要としないさまざまなアプローチを試しましたが、常にセキュリティ上の懸念に直面していました。これは安全だと思います。

于 2013-12-10T19:11:45.933 に答える