2017-09-17 14 views
0

ライブラリOmniAuthが最初にそうしていることを理解しようとしています。まず、「マルチプロバイダ認証」を正しく理解しているかどうかを確認します。これは、あなたのアプリがユーザーとしてあなたを認証するために、Facebookのどちらか、またはGoogleをさまざまな種類のプロバイダとして使用できることを意味しますか?したがって、あなたのFacebookのID/PWまたはあなたのGoogleのID/PWを提供することによって、あなたのアプリにログインすることができます両方のあなたのアプリの下で同じアカウントに連れて行く?マルチプロバイダ認証の基本用語

答えて

1

私はそれがちょっと遅いと知っていますが、はい、あなたは正しいです。 OmniAuthは、他の認証プロバイダを利用してユーザーが登録して認証するための、より多くのオプションを提供するためのものです。単純な状況では、プロセスは次のように記述できます。

  1. プロバイダサイトでアプリを登録します。彼らはあなたが誰であるかを知っています。通常はリダイレクトURLが必要になります。リダイレクトURLは、後で認証応答を送信する場所です。
  2. あなたはapp_idとapp_secretを取得します。
  3. 「サインインして...」をクリックすると、認証URLに移動します(このリンクには、あなたのapp_idとリダイレクトURLがパラメタとして表示されることがよくあります)。
  4. このアプリには許可されていますこれらの事。プロバイダが認証コードを送り返します。
  5. アプリは自信を持ってプロバイダと話をすることができます。ちょっとプロバイダ、私はこのアプリ(ショーapp_idとapp_secret)であり、このユーザーは私(認証コードを表示)を許可しています。プロバイダは成功認証データ(トークン、uidなどの情報を含む)を返します。
  6. サーバー側のフローでは、uidをチェックして、システム内のすべてのユーザーと一致するかどうかを確認できます。 userにリンクしているauth_providersの表)。そうであれば、そのユーザーにサインインします(サインアップしていない場合)。

ほとんどの場合、ユーザーは1つの認証プロバイダ(FacebookやGoogleなど)のみを使用したいと考えています。両方を使用すると、2つの別々のアカウントが作成されます。もちろん、authデータからのメール返信がすでに使用されているかどうかを検出するなどの方法を見つけることはできますが、信頼できないのは、ユーザーがGoogleとFacebookの両方に同じメールを登録した場合のみです。ユーザーが同時に複数のプロバイダにサインインできるようにする場合は、それらを重複排除するソリューションを見つけることはあなた次第です。

+0

説明をいただきありがとうございますが、手順4では、プロバイダが認証コードを送信する必要があるのはなぜですか?ユーザーがサインインした後でuidやその他の情報を送信できないのはなぜですか?プロバイダが認証コードを私のアプリケーションに送信し、次に私のappが私のapp_idとapp_secretと一緒にそれをプロバイダに送り返すことが繰り返されているようです。 – stackjlei

+1

上記で説明したのは、OAuth 2プロトコルの認可付与タイプです。 Implicit Grant Typeは、記述したとおりに機能します。違いはあなたのapp_secretについてです。 **認可付与タイプ**は、アプリの秘密情報(Webサーバーなど)を保護する方法があればお勧めします。認可プロセスには、あなたの秘密の提供は含まれません。あなたのサーバーが作る2度目のトリップだけが秘密裏にあります。ダブルチェックのため、より安全です。このようにして得られたアクセストークンは長く生存している(例えば60日)。 ** Implicit Grant Type **は通常サーバーなしのSPA用です。トークンは短期間(2時間)です – harrisnguyen

+0

手順3でアプリIDとアプリの秘密情報を同時に送信すると何が問題になりますか? – stackjlei