2017-02-03 19 views
0

OAuthまたはOpenID認証を使用してユーザデータベースに対してユーザを認証するサードパーティのウェブサイトがあります。私はFlaskを使ってPythonでやりたいと言っていたプロバイダを実装することを任されていますが、私は実際の認証ワークフローを巡って頭を抱えることにいくつかの困難を抱えています。OAuth2/OpenID認証ワークフローの明確化

私たちが探しているのは、基本的な認証メカニズムです。ユーザーがサードパーティのサイトを使用する場合、ユーザー名とパスワードを入力し、サードパーティのサイトに「はい、許可されています」と指示します。サードパーティのサイトの制限のため、この交換はOAuthまたはOpenIDを使用して行われなければなりません。ユーザー名とパスワードをフォームに入力して提出してjsonを返送するなどの簡単な操作はできませんオブジェクトまたは成功/失敗を示す何か。ここで

は、(虚偽の理解を修正してください)これまでのワークフローの私の理解です:

  • ユーザーは、クライアントが適切にOAuthを作成し、サードパーティのサイトに自分のOAuthユーザーID(クライアント)
  • に入りますユーザーIDとプロバイダ(私たち)に基づいたURL
  • プロバイダは、パスワードを入力し、データベースに対して認証された認証ページを表示してURLに応答します
  • ユーザー次にbaに送信されますクライアントサイトへのアクセス

これは私が迷子になる場所です。ユーザーが正常に認証されたかどうかは、クライアントがどのように認識しますか?プロバイダーは、ユーザーにリダイレクトするときに、これを示す要求に何かを送信しますか?もしそうなら、何?それとも何か他のものですか?ユーザーがクライアントに戻ったときに実行される追加の手順があるのでしょうか?

私の主な出発点はこのページです:https://flask-oauthlib.readthedocs.io/en/latest/oauth2.html#クライアントモデルやグラントトークンモデルやベアラトークンモデルなどについて多くのことを話しています。私の基本的なニーズを考えれば、認証データを追跡する必要はありません。認証だけでは、そこに表示されているものを迂回することはできますか?

編集:もう少し掘り下げた後、ここで説明するように、「リソース所有者パスワード資格認可」のように見えます。https://tools.ietf.org/html/rfc6749#section-4.3は私がここでしようとしているものかもしれません。助成金の種類を使用して、それが思われるワークフローは次のとおりです。

  • ユーザー(このシナリオでは、「リソースの所有者は」、)クライアントが私たちのURLへの要求を行う
  • クライアントページでユーザー名とパスワードを入力します(私たちが設定したものどんなものでも)要求本体にユーザ名とパスワード(POSTリクエスト)と、 "password"のgrant_typeフィールドが含まれています。
  • 私はユーザーを認証し、jsonフォーマットの「アクセストークン」またはエラー応答で応答します。

れるこのワークフローでは、(それが私たちのサードパーティベンダーが念頭に置いていたものだと仮定して)十分に簡単に聞こえる、と私が欲しかった、まさに、まだクライアントのモデルと複数のトークンタイプについてどのようなすべてのものを思って私の葉などサンプルコードを見てみましょう。

答えて

-1

OAuthを認証に使用します。ここをクリックしてくださいOn a high level, how does OAuth 2 work?

シナリオに戻る私はサードパーティのサイトがユーザーが認証されているかどうかをチェックするサーバー上で実行されていると思います。あなたがgmailにログインして同じブラウザで新しいタブを開き、gmail.comにアクセスして再度ログインする必要がない場合、gmailは直接あなたの受信トレイを開きます。ここで何が起きてるの?ブラウザのCookieのセッションクッキー/トークンが検証され、その後Gmailの受信トレイが直接表示されます。あなたはクロムのネットワークタブでアシスタンスのリダイレクトをチェックすることができます(コンソールウィンドウのネットワークタブはgmail.comに2度アクセスすると開いてください)

同様に、サードパーティのサイトをgmail.comと考えると、かどうかユーザーを検証するためにユーザーデータベースを維持する必要はありません。 Oauthはログインを処理し、その要求に基づいて正しいURLにユーザーを送ります。