2012-05-08 12 views
5

私はYouTubeに特定のYouTubeチャンネル(つまり、個々のユーザーのチャンネルではなく、ユーザー名とパスワードを持つ1つのチャンネル)に動画をアップロードするアプリを持っています。YouTube ClientLoginからOAuth 2.0への移行

私のサーバー側のプロセスであるClientLoginでは、YouTubeにU/Pが提供され、すべてが先に進められました。しかし、これは推奨されなくなっており、OAuth 2.0へのアップグレードを検討しています(推奨事項に従って)。しかし、ドキュメントには、ユーザーがログインしたときにリダイレクトURIが存在することが主張されています。 (ユーザーは何もログインしていないか、*ログインするための資格情報がないので、ユーザーのログインをバイパスするために...アプリケーションは自分のビデオを撮り、それをOURチャンネルにアップロードするように設計されています)。だから、私が必要とするのは、何か尋ねられるユーザーを迂回し、YouTubeが自分のチャンネルの資格情報を取得し、私にアップロードするトークンを返すことだけです。

これは完全に標準的で非論争的な手順なので、明らかに何かが欠落していなければなりませんが、私はそれが何であるかを考え出すことはできません。

私の質問は、ユーザーのダイアログ - >リダイレクトをスキップして、YouTubeがOAuth 2.0でビデオを受け入れ、アップロードするための資格情報をYouTubeに提供する方法です。 https://developers.google.com/youtube/2.0/developers_guide_protocol#AuthSub_Authentication_Flow をそして舞台裏で静かにユーザートークンを取得しているために:

は、私が本当にした後だと、ここでDirectUploadのアプローチに従う行うことです。

TIA

答えて

6

本当に完全にOAuth2.0へのアクセスを許可するために、外部のページを訪問バイパスする(私が見つけたことを)方法はありません。 最も近いのは、code.google.com/apis/consoleに「インストールされたアプリケーション」プロジェクトを作成し、デバイスの方法論を使用することです。 クライアントIDとクライアント秘密を受け取ります。これらは後で使用されます。 開発者用のキーを生成するのは理想的ですが、現時点ではこれが必須とは思われませんが、code.google.com/apis/youtube/dashboard/

ヘッダーと応答にはJSON表記を使用しています。あなたの選択した言語に簡単に適応できるはずです。

{ 
client_id: 'YOUR_CLIENT_ID', 
scope: 'https://gdata.youtube.com' 
} 

YOUR_CLIENT_IDがクライアントである:

まず、ヘッダ

{ 
    'Content-Type': 'application/x-www-form-urlencoded', 
    'Content-Length': post_data.length, 
    'X-GData-Key': 'key=YOUR_DEVELOPER_KEY' 
} 

と含むデータでaccounts.google.com/o/oauth2/device/codeするPOSTリクエストを行います以前設定したGoogle apisプロジェクトで取得したIDです。

あなたがこのような応答を取得します:

{ 
    "device_code" : "4/Pj8m71w5XuEMTT0ZwOJVgvlTfF4Q", 
    "user_code" : "5wtw67wm", 
    "verification_url" : "http://www.google.com/device", 
    "expires_in" : 1800, 
    "interval" : 5 
} 

あなたはあたり30分(1800秒以内(「VERIFICATION_URL」フィールドで定義された)www.google.com/deviceを訪問していない場合は " expires_in "応答フィールド)、この最初の要求を再度実行する必要があります。 www.google.com/deviceページで、まだログインしていない場合はログインするように求められ、「user_code」レスポンスフィールドで定義されている確認コードを入力します。あなたは、アプリケーションとアプリケーションが要求している権限のリストを承認する要求が表示されます。 "device_code"フィールドの値を(少なくとも一時的に)保存します。これは、アクセストークンとリフレッシュトークンを要求するときに使用されます。

権限が付与されたので、アクセス/リフレッシュトークンのペアを要求できます。これは、リフレッシュトークンを格納している場合にのみ、一度発生する必要があります。 がトークンペアを更新/アクセスを要求するには、ヘッダー

{ 
    'Content-Type': 'application/x-www-form-urlencoded', 
    'Content-Length': post_data.length, 
    'X-GData-Key': 'key=YOUR_DEVELOPER_KEY' 
} 

とデータ

{ 
    client_id: 'YOUR_CLIENT_ID', 
    client_secret: 'YOUR_CLIENT_SECRET', 
    code: 'YOUR_DEVICE_CODE', 
    grant_type: 'http://oauth.net/grant_type/device/1.0' 
} 

応答意志とaccounts.google.com/o/oauth2/tokenするPOSTリクエストを行う必要がありますこれは、アクセストークンが3600秒(60分)に有効期限が切れると、どのようなあなたの現在のアクセストークンがあり、どのようなリフレッシュトークンがあることを指定します。この

{ 
    "access_token" : "YOUR_ACCESS_TOKEN", 
    "token_type" : "Bearer", 
    "expires_in" : 3600, 
    "refresh_token" : "YOUR_REFRESH_TOKEN" 
} 

のように見えます。 現在のセッションで使用するためのアクセストークンと、将来のセッションでのリフレッシュトークンを保存する必要があります。

APIリクエストを行う場合は、アクセスヘッダをAuthorizationヘッダーフィールドに含めると同時に、開発者キーを含めておきます。あなたは古いものが期限切れになったときだけでなく、いつでもアクセストークンをリフレッシュすることができ

{ 
    'Authorization': 'Bearer YOUR_ACCESS_TOKEN', 
    'X-GData-Key': 'key=YOUR_DEVELOPER_KEY', 
    'Slug': 'video.mp4', 
    'Content-Type': 'multipart/related; boundary="f897a6d"', 
    'Content-Length': post_length, 
    'Connection': 'close' 
} 

: が動画をアップロードするために、私はこれらのヘッダを使用していました。あなたのアクセストークンを更新するには、あなたがこのような応答を取得するヘッダ

{ 
    'Content-Type': 'application/x-www-form-urlencoded', 
    'Content-Length': post_data.length, 
    'X-GData-Key': 'key=YOUR_DEVELOPER_KEY' 
} 

とデータ

{ 
    client_id: 'YOUR_CLIENT_ID', 
    client_secret: 'YOUR_CLIENT_SECRET', 
    refresh_token: 'YOUR_REFRESH_TOKEN', 
    grant_type: 'refresh_token' 
} 

とaccounts.google.com/o/oauth2/tokenするPOSTリクエストを行います

{ 
    "access_token" : "YOUR_NEW_ACCESS_TOKEN", 
    "token_type" : "Bearer", 
    "expires_in" : 3600 
} 

ここで、YOUR_NEW_ACCESS_TOKENは、今後のリクエストで使用するための新しいトークンです。

+0

これは、たとえばVideoオブジェクトのような.netライブラリに接続する方法はありますか? –

関連する問題