2011-08-02 2 views
0

私は、データベースに関連付けられた通常のデータを持つUserテーブルを持つ必要があるYouTubeアプリケーションを開発しています。私はこのアプリケーションのOAuthルートに行き、AccessTokenとRequestTokenの2つのテーブルを持つことにしました。OAuthトークン:ユーザーテーブルに何をリンクできますか?

アクセストークンまたはリクエストトークンのような何らかのユーザーテーブルに何がリンクされるのかわかりません。

  1. トークンが期限切れになった場合は、そのトークンを持っているユーザーを検索するだけですか?
  2. ユーザーに署名するには、ユーザーのトークンを削除してセッションからトークンを消去するだけですか?

編集:言い換えれば、私は基本的にユーザーが自分のサイトに登録する必要はなく、OAuth経由でログインし、自分のアプリケーションでUserテーブルにユーザーエントリを作成して、それまでにリンクされている。

答えて

1

ログインとリソースの2つの部分があります。

YouTubeをログイン用に使用する場合は、アクセストークンをまったく保存する必要はありません。ユーザーがアクセストークンを使用してYouTubeから戻ったときに、YouTubeのID(トークンレスポンスのIDを持つ拡張パラメータをYouTubeがサポートしているかどうかわからない)を取得し、アクセストークンを破棄します。また、ユーザーのYouTubeデータにアクセスするために他の呼び出しを行う場合は、アクセストークンを保持する必要があります。これを実装する

一般的な方法は次のとおりです。

  1. ユーザーはあなたが私達が状態を呼び出すいくつかのランダムな文字列でセッションクッキーを設定し、あなたのサイトを訪問するとき。
  2. ユーザーが「YouTubeでログイン」をクリック
  3. YouTubeからリクエストトークンを取得して、それをローカルキャッシュに保存します(これは小規模のアプリの場合はデータベース、redis、メモリになります) 、memcacheなど)、それを暗号化してクライアント上の別のCookieに格納します。リクエストトークンコールを作成するときは、#1でクッキーとして設定された値でコールバックに 'state'パラメータを含めます。これはCSRFに対する重大なセキュリティー防御です。また、リダイレクトエンドポイントはSSLを使用する必要があります。
  4. あなたはYouTubeにユーザーがログイン
  5. リクエストトークンとYouTubeにユーザーをリダイレクト(および暗号化された要求トークンシークレットクッキーを任意で)、アプリケーションを承認し、その後、
  6. バックリダイレクトされますあなたは、ユーザーが戻ってくることを確認してくださいリダイレクションエンドポイントへのアクセスは、着信状態パラメータの値とユーザーのセッションクッキーの値を比較することによって、最初に送信したユーザーと一致します。
  7. ローカルキャッシュからリクエストトークンシークレットを取得するか、以前に使用したトークンシークレットクッキーを復号化して使用することにしました。ユーザー情報
  8. データベース内を検索して、既にそのYouTube IDを持つユーザーがいるかどうかを確認します。そうした場合、これは単なるログインに過ぎません。そうでない場合、これは新しいユーザー登録です。したがって、ユーザーの表に新しいレコードを作成します。
+0

偉大な情報..コールバックの状態パラメータをインクルードすると、ユーザは長い時間ウィンドウを開いたままにすることはできません。 – Ryan

+0

また、私は周りを見ていて、それはyoutubeがユーザーIDを取得する方法を提供するように見えません。 – Ryan

+0

状態パラメータは、CSRF攻撃を防ぐためにのみ使用されます。基本的には、攻撃者が独自のリクエストトークンを使用してリンクを作成できないようにし、別のユーザーが自分のサイトに戻って自分のデータを引き継ぐことを騙します。 YouTube APIについては、これまでの経験はありませんが、通常のGoogle APIを使用するだけでよいと思います。 –

関連する問題