Autorisieren Kommandozeilen-tool zu verbrauchen Google-APIs (über OAuth2.0 oder irgendetwas anderes)
Ich denke ich verstehe, wie OAuth 2.0 funktioniert im Kontext einer mobilen app oder website - weder ist mein Fall.
Ich habe ein C++ Befehlszeile Anwendung, die ich möchte zu geben, Zugang zu einem der Google-Dienste ( Google Fusion Tables ), aber ich denke, diese Frage gilt für alle von der Google-Dienste, oder der Teufel, vielleicht auch alle Kommandozeilen-app, die zu tun hat mit OAuth2.
Habe ich den Benutzernamen. Ich habe das Kennwort (der Benutzer eingegeben). Ich brauche, um ein token, so kann ich die Aufrufe durch Curl. Was ist der einfachste Weg, dies zu erreichen?
Update 1:
Nachdem sich durch die Dokumentation, so scheint es, dass die am wenigsten schmerzhafte OAuth2 flow werden die "Installierte Anwendung" ein.
Was ich denke ist, dass mein command line tool wird den Anforderungen für öffentliche Tische, ohne ein token (, aber es scheint, wir müssen noch um das senden einer Anwendungs-id aus Google, die ich bekommen kann von der Google-APIs dashboard).
Immer wenn mein Kommandozeilen-tool, müssen verwenden Sie eine private Ressource, die Benutzer werden gebeten, einen von Google gelieferten Autorisierungs-code (was mein Kommandozeilen-tool können Sie dann nutzen, um ein brauchbares token). Wenn der Benutzer hat nicht geliefert Autorisierungs-code in der Befehlszeile, mein tool würde nur drucken, einen link kann der Benutzer einfügen, um die URL zu generieren, den Authorisierungs-code. Der link würde dann so Aussehen:
Sobald der Benutzer akzeptiert, hätte Sie die paste, Autorisierungs-code auf den terminal, damit es verwendet werden kann mit dem Befehlszeilen-tool. Das Kommandozeilen-tool verwenden würde, den Authorisierungs-code für Google Fragen für eine token und dann, endlich, kann ich dann die Google-token, um die API-Aufrufe.
Ein paar Dinge sind mir noch immer unklar. Hat den Authorisierungs-code ändern? Wenn so, es scheint, ich würde retten müssen, die token und refresh Token irgendwo, so kann ich die Wiederverwendung der refresh-token jedes mal, wenn das token abläuft.
Ist es nur mir so, oder hat das ganze Ding scheint wie verrückt zu reden, gerade so, dass ich ein Google-API aus der command line?
Ich würde normalerweise verwenden Sie die ClientLogin flow, aber alles scheint darauf hinweisen, dass es wird bald veraltet.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Zur Beantwortung Ihrer Frage über die "Installierte Anwendung" Durchfluss:
Den Autorisierungs-code ist nur einmal gültig. Nachdem Sie sich ausgetauscht haben - und bekam ein refresh token und ein access token - es wird nicht mehr verwendet. Nur dump es. Es ist ein one-time-Einsatz nur, und Sie brauchen es nicht mehr. Was Sie tun müssen, ist einfach zu halten/speichern/beibehalten des refresh token in einigen lokalen Datei für die Wiederverwendung.
Den refresh token ist die wichtig token. Es gibt Ihnen Zugriff auf die API für eine unbegrenzte Zeit, weil Sie können es verwenden, um programmgesteuert neue access Token (die jeweils 1h). Überprüfen Sie die refresh token doc über die Bedienung.
Die Google APIs-Client-Bibliotheken in der Regel behandeln aktualisieren Sie das Token automatisch und transparent für Sie, aber da haben wir nicht einen C++ - client-lib, müssen Sie dies selbst tun. Eine Technik, die wir verwenden, ist, dass wir catch-403-Fehler, wenn dabei die Anforderungen an die API (die angibt, eine ungültige access token), in diesem Fall machen wir aktualisieren um einen neuen zu bekommen access token, dann automatisch erneut versuchen, die operation, die scheiterte zunächst.
Mein Rat:
Den Fluss, der Ihnen die beste Nutzer-Erfahrung, ist die Verwendung der server-side web application flow. Es ist möglich, verwenden Sie es auf installiert und/oder Befehl Linie Anwendung, wenn es mehr Arbeit. Hier ist, wie:
http://127.0.0.1:7777
)http://127.0.0.1:7777
http://127.0.0.1:7777
.Das ist es, jetzt haben Sie die aktualisieren-und das access-Token (aus Schritt 4) und Sie sind wieder in Ihrer app nach der Tötung der browser.
Warum All diese Verwirrung?
Client Login ist veraltet. Es ist Weg und funktioniert nicht mit neueren APIs. Google nicht möchten, dass Benutzer geben Sie Ihr Passwort, da Sie versucht sein könnten, zu speichern, und Sie könnte gehackt :)) Auch, es gibt Ihnen Zugriff auf zu viele Informationen, da konnte man Sachen kaufen, die mit Ihrem Google Checkout-Konto oder Ihr Passwort zu ändern, zu stehlen Ihre Konten. Derzeit ist der einzige Weg zu gehen, auf Sicht der Sicherheit ist es, diese 3-beinigen auth-Systeme wie OAuth2 und raten von der Verwendung von Passwörtern, so dass Benutzer raus aus der Gewohnheit, indem Sie Ihren Benutzernamen und Passwort an 3. Parteien. Natürlich, OAuth2 ist viel schwieriger zu verwenden für desktop/command-line-Anwendungen...
Die OOB-Alternative
Wenn Sie nicht wollen oder können nicht starten Sie einen web-server zur überwachung von dem code dann kann man das
oob
OAuth-flow. Es funktioniert einfach durch Angabe deroob
wie Sie die redirect-URI. In diesem Fall, anstelle der Weiterleitung auf eine angegebene URL, wird dem Benutzer angezeigt, eine Seite, die sagt "Hier ist dein auth-code. Kopieren Sie ihn in Ihre app.". Auf Ihrer app können Sie einfach lassen Sie Ihre Benutzer fügen Sie den auth-code in einem text-Feld und voila. Dies ist ein schlechter user experience kann aber robuster in einigen Fällen und arbeiten in Umwelt, insbesondere für das low-tech-Umgebungen.Vorsicht, da nicht alle OAuth 2 Anbieter unterstützen aber zumindest Google und Facebook tun.