37

Ich versuche, einen Upload auf YouTube von meinem Java-basierten Web-App zu machen, verbrachte ich ein paar Tage zu verstehen, was und wo ist das Problem und ich Ich bekomme es nicht, denn jetzt ziehe ich mir die Haare aus dem Kopf.Google OAUTH: Der URI in der Anfrage umleiten nicht ein URI umleiten registriert Übereinstimmen

ich registrierte meinen Web-App in Google-Konsole, so habe ich ein Paar von Client-ID und geheimen und eine Möglichkeit JSON-Typ-Datei mit meiner Config zum Download bereit.

So, hier ist die config:

{ 
    "web":{ 
     "auth_uri":"https://accounts.google.com/o/oauth2/auth", 
     "client_secret":"***", 
     "token_uri":"https://accounts.google.com/o/oauth2/token", 
     "client_email":"***", 
     "redirect_uris":["http://localhost:8080/WEBAPP/youtube-callback.html","http://www.WEBAPP.md/youtube-callback.html"], 
     "client_x509_cert_url":"***", 
     "client_id":"***", 
     "auth_provider_x509_cert_url":"https://www.googleapis.com/oauth2/v1/certs", 
     "javascript_origins":["http://www.WEBAPP.md/"] 
    } 
} 

Wie ist möglich, dass ich die Standard-URL von Google immer bin?

The redirect URI in the request: http://localhost:8080/Callback did not match a registered redirect URI

Es gibt mir immer die Standard-http://localhost:8080/Callback URL anstelle von mir.

Und IDE-Konsole zeigt mir, dass:

Please open the following address in your browser: https://accounts.google.com/o/oauth2/auth?client_id=***&redirect_uri=http://localhost:8080/Callback&response_type=code&scope=https://www.googleapis.com/auth/youtube.upload Attempting to open that address in the default browser now...

ich die letzte Version von Abhängigkeiten bin mit: google-api-services-youtube v3-rev99-1.17.0-rc und google-api-services-youtubeAnalytics v1-rev35-1.17.0-rc

Antwort

28

Wenn Ihr Browser den Benutzer auf Google oAuth Seite umleitet, sind vorbei Sie als Parameter die Umleitung URI Sie die Google-Server wollen mit dem Token Antwort zurückzukehren? eine Umleitung URI in der Konsole Einstellung ist keine Art und Weise Google zu sagen, wohin sie gehen, wenn ein Login-Versuch kommt, sondern es ist eine Art und Weise Google zu sagen, was die erlaubte Umleitung URIs ist (also wenn jemand schreibt sonst einen Web-App mit Ihrem Kunden ID, aber ein anderer Umleitungs-URI wird nicht zugelassen);

https://accounts.google.com/o/oauth2/auth?client_id=XXXXX&redirect_uri=http://localhost:8080/WEBAPP/youtube-callback.html&response_type=code&scope=https://www.googleapis.com/auth/youtube.upload 

(der Rückruf URI übergeben als Parameter URL-codiert sein muss, btw): Ihre Webanwendung sollte, wenn jemand den "Login" -Button klickt, um den Browser zu senden.

Wenn der Google-Server vom Benutzer eine Autorisierung erhält, leitet er den Browser an das weiter, was Sie als redirect_uri gesendet haben. Es wird das Token als Parameter in diese Anfrage aufnehmen, sodass Ihre Rückrufseite das Token dann validieren, ein Zugriffstoken erhalten und zu den anderen Teilen Ihrer App weitergehen kann.

Wenn Sie besuchen:

http://code.google.com/p/google-api-java-client/wiki/OAuth2#Authorization_Code_Flow

Sie können es besser Proben des Java-Client sehen demonstrieren, dass Sie die getRedirectUri-Methode überschrieben haben Ihren Rückruf Pfad angeben, so dass die nicht standardmäßig verwendet wird.Die Umleitungs-URIs befinden sich aus mehreren Gründen in der client_secrets.json-Datei. Ein großer ist, dass der oAuth-Fluss überprüfen kann, ob die von Ihrer App angegebene Umleitung mit dem übereinstimmt, was Ihre App zulässt.

Wenn Sie https://developers.google.com/api-client-library/java/apis/youtube/v3 besuchen Sie können eine Beispielanwendung für sich selbst generieren, die direkt von Ihrer App in der Konsole basiert, in der (wieder) die getRedirectUri-Methode überschrieben wird, um Ihre spezifischen Rückrufe zu verwenden.

+1

Wie es funktioniert, scheint es, dass die Bibliothek nicht zulassen wird, dass ich meine angepasste URL passiere, stattdessen wird sie die Standard-URL übergeben, oder ich habe etwas falsch gemacht, oder ich habe ein Detail übersehen. Ich dachte, es würde die URIs von client_secret.json bekommen. Dann für was ist die Konfigurationsdatei? – Denees

+0

Bearbeitete meine Antwort oben, um mehr Details für Ihren Kommentar zur Verfügung zu stellen. – jlmcdonald

+0

Dank Jarom, das war das Problem, ich habe die Methode nicht überschrieben, jetzt funktioniert es. Vielen Dank, du hast mir Zeit gespart. – Denees

3

Sie müssen in die Entwicklerkonsole gehen und setzen

http://localhost:8080/WEBAPP/youtube-callback.html 

als Callback-URL.

This video ist etwas veraltet, da es die ältere Entwicklerkonsole anstelle der neuen zeigt, jedoch sollten die Konzepte noch gelten. Sie müssen Ihr Projekt finden in the developer console and register a callback URL.

+0

Bitte meine Post sorgfältig lesen, ich habe es schon registrieren und heruntergeladen meine config config in dem ersten Beitrag ist, und hier ist der Screenshot von meiner Web-app Config von Google Console http: // img89.imageshack.us/img89/5770/4p7q.png, also alle Nähte richtig, aber es funktioniert überhaupt nicht, ich habe versucht, die Konfiguration zu löschen und neu erstellen etwa 10 mal mit alten Google Console. Ich dachte, es ist das Problem mit localhost, also habe ich sogar bei der Produktion versucht, wie man es vom Screenshot sieht, und das funktioniert auch nicht. – Denees

+0

Sie müssen den Weiterleitungs-URI in der Webkonsole festlegen, nicht nur in Ihrer JSON-Konfigurationsdatei. –

+0

Ich habe oben einen Screenshot bereitgestellt :), hast du es gesehen? Es gibt einen Screenshot von der Google Console-Einrichtung. – Denees

30

Ich glaube, ich habe das gleiche Problem wie Sie. Ich adressiert dieses Problem mit den folgenden Schritten:

1) Zum Google Developers Console

2) Set JavaScript Herkunft:

3) Set Redirect URIs:

+0

Dies ist sehr nützlich auf einer cordova/phonegap App. – Multitut

+1

Hi @Multitut Haben Sie dieses Training für Sie gemacht? Ich bekomme den folgenden Fehler die Umleitung URI in der Anfrage stimmt nicht mit denen für die oauth – Yatin

+1

genehmigt Es funktioniert jetzt für mich entweder. – FrenkyB

1

konnte ich mein Arbeits mit den folgenden Client-Credentials erhalten:

Autorisierte JavaScript Ursprüngen

http://localhost

Autorisierte Redirect URIs

http://localhost:8090/oauth2callback

Hinweis: verwendet I-Port 8090 statt 8080, aber das spielt keine Rolle, solange Ihr Python-Skript den gleichen Port wie Ihre client_secret.json-Datei verwendet.

Referenz: Python Quickstart