2012-05-08 10 views
5

Ich habe eine App, die Video auf YouTube auf einen bestimmten YouTube-Kanal hochlädt (also nicht auf den Kanal eines einzelnen Nutzers, sondern auf einen einzelnen Kanal, für den ich den Nutzernamen und das Passwort habe).Migration von YouTube ClientLogin in OAuth 2.0

In der ClientLogin meine serverseitige Prozess zur Verfügung gestellt YouTube mit der U/P und alles voran. Das ist jedoch veraltet und ich bin auf der Suche nach einem Upgrade auf OAuth 2.0 (gemäß ihrer Empfehlung), aber die Dokumentation besteht darauf, dass es einen Umleitungs-URI gibt, wenn der Benutzer sich angemeldet hat. Es scheint nicht zu erklären, wie Um die Benutzeranmeldung zu umgehen (da der Benutzer nichts zu loggen braucht, oder irgendwelche Anmeldeinformationen um sich mit * anzumelden ... ist die App dazu bestimmt, ihr Video aufzunehmen und es auf UNSEREN Kanal hochzuladen). Was ich also brauche, ist, den Benutzer, der um etwas gebeten wird, zu umgehen und YouTube einfach die Zugangsdaten meines Kanals zu nehmen und mir den Token zurückzugeben, mit dem ich den Upload machen kann.

Ich realisiere, dass dies ein völlig standardmäßiger und nicht umstrittener Vorgang ist, also muss ich etwas Offensichtliches vermissen, aber ich kann einfach nicht sagen, was das ist.

Also, meine Frage ist, wie überspringe ich den Benutzerdialog-> Weiterleitung und nur youtube mit Anmeldeinformationen für die Annahme und dann mein Video in OAuth 2.0 hochladen?

Was ich wirklich nach ist die DirectUpload Ansatz zu tun, folgen hier: https://developers.google.com/youtube/2.0/developers_guide_protocol#AuthSub_Authentication_Flow Und damit der Anwender Token leise hinter den Kulissen abgerufen haben.

TIA

Antwort

6

Es gibt wirklich keine Möglichkeit (die ich gefunden habe) vollständig Bypass auf eine externe Seite den Besuch der OAuth2.0 Zugang zu autorisieren. Am nächsten komme ich, um ein "Installierte Anwendung" -Projekt auf code.google.com/apis/console zu erstellen und die Geräte-Methode zu verwenden. Sie erhalten eine Client ID und ein Client Secret. Diese werden später verwendet. Im Idealfall würden Sie einen Entwicklerschlüssel generieren, obwohl ich glaube nicht, dies zu diesem Zeitpunkt erforderlich wird, durch code.google.com/apis/youtube/dashboard/

ich JSON-Notation für Kopf- und Antworten, es sollte leicht an die Sprache Ihrer Wahl anzupassen sein.

Zuerst eine POST-Anforderung machen mit den Headern

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

und die Daten accounts.google.com/o/oauth2/device/code enthält:

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

wo YOUR_CLIENT_ID der Client ID, die Sie für das Google Apis-Projekt erhalten haben, das Sie zuvor eingerichtet haben.

Sie erhalten eine Antwort wie diese:

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

Wenn Sie nicht besuchen www.google.com/device (von der „VERIFICATION_URL“ -Feld definiert ist) innerhalb von 30 Minuten (1800 Sekunden pro die " expires_in "Antwortfeld), müssen Sie diese erste Anfrage erneut durchführen. Auf der Seite www.google.com/device werden Sie aufgefordert, sich anzumelden, falls Sie noch nicht angemeldet sind, und dann den Bestätigungscode einzugeben (definiert durch das Antwortfeld "user_code"). Sie erhalten eine Anfrage zur Autorisierung der Anwendung und eine Liste der Berechtigungen, die die App anfordert. Sie möchten den Wert für das Feld "device_code" (zumindest temporär) speichern. Dies wird verwendet, wenn ein Zugriffstoken und ein Aktualisierungstoken angefordert werden.

Nachdem die Berechtigung erteilt wurde, können wir ein Zugriffs-/Aktualisierungstokenpaar anfordern. Dies muss nur einmal geschehen, vorausgesetzt, Sie speichern das Aktualisierungstoken. den Zugang zu bitten/Aktualisierungs-Token Paar müssen Sie eine POST-Anfrage mit den Headern

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

und die Daten accounts.google.com/o/oauth2/token machen

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

Die Antwort wird so aussehen

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

Dies gibt an, dass die Zugriffstoken in 3.600 Sekunden abgelaufen ist (60 Minuten) und was Ihre aktuellen Zugriffstoken ist und was die Aktualisierungs-Token ist. Sie möchten das Zugriffstoken für die Verwendung mit Ihrer aktuellen Sitzung und das Aktualisierungstoken für zukünftige Sitzungen speichern.

Wenn Sie eine API-Anfrage erstellen, möchten Sie das Zugriffstoken in das Feld Authorization-Header aufnehmen und den Entwicklerschlüssel einfügen, so wie wir es schon immer gemacht haben. Für ein Video hochladen, benutzte ich diese Header:

{ 
    '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' 
} 

Sie können Ihr Zugriffstoken jederzeit aktualisieren, nicht nur, wenn das alte abläuft. Um Ihre Zugriffstoken aktualisieren Sie eine POST-Anfrage machen mit den Header accounts.google.com/o/oauth2/token

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

und die Daten

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

Sie erhalten eine Antwort wie diese erhalten

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

wo YOUR_NEW_ACCESS_TOKEN das neue Token ist für Sie in Ihren zukünftigen Anforderungen zu verwenden.

+0

Gibt es eine Möglichkeit, dies mit den .net-Bibliotheken zu verbinden, wie zum Beispiel das Video-Objekt? –