2016-07-08 26 views
0

Ich habe versucht, eine UWP-App in C++ (Visual Studio) für OAuth in Google Drive API zu schreiben. Ich habe die Notizen aus diesem Projekt unter Github - https://github.com/googlesamples/oauth-apps-for-windows/blob/master/OAuthUniversalApp/README.mdUWP OAuth google C++

Ich konnte den Autorisierungscode von Google erhalten. Aber wenn ich den Autorisierungscode verwenden Token für die Zulassung zu beantragen, dann wird es wirft mir einen Fehler 404.

Meine Authorization Token Anforderungs-URI wie folgt aussieht -

https://googleapis.com/oauth2/v4/token?code=XXXXXXX#&client_id=ZZZZZZ&client_secret=YYYYYY&redirect_uri=uwapp.testgoogleoauth:/oauth2redirect&grant_type=authorization_code

Going durch die Hinweise in dem genannten Link, Ich habe die Client-ID mit iOS-Anwendungstyp erstellt. Aber ich habe den geheimen Schlüssel des Clients bei diesem Schritt nicht bekommen. Ich musste den geheimen Schlüssel des Clients für den iOS-Anwendungstyp erneut explizit generieren.

Gibt es ein Problem, das Sie in der Anfrage-URI sehen, die für die Autorisierungs-Token-Anfrage gesendet wird? Welchen Wert sollte client_secret verwenden, wenn der Clienttyp in der Google Konsole als iOS ausgewählt wurde?

Danke, /vikas

Antwort

0

Gibt es eine Frage, die Sie in der Anfrage siehe URI für die Tokenanforderung Authorization gesendet?

In Ihrer Anfrage-URI verwenden Sie https://googleapis.com/oauth2/v4/token. Allerdings, um die Tokenanforderung zu machen, der richtige Token Endpunkt sollte sein:

https://www.googleapis.com/oauth2/v4/token

Und das ist der Grund, warum Sie 404 (Not Found) Fehler.

Welchen Wert sollte client_secret haben, wenn der Typ des Clients in der Google Konsole als iOS ausgewählt wurde?

In Handling the response and exchanging the code, können wir die

client_secret Das Client Geheimnis, das Sie von der API-Konsole (gilt nicht für Kunden wie Android, iOS oder Chrome-Anwendungen registriert) erhalten finden.

Also für iOS-Clients gibt es keine Notwendigkeit client_secret zu verwenden. Und da UWP iOS ähnlich ist, können wir dieses Feld auch in UWP ignorieren.

Der komplette Autorisierungs-Token Anfrage wie folgt aussehen könnte:

POST /oauth2/v4/token HTTP/1.1 
Host: www.googleapis.com 
Content-Type: application/x-www-form-urlencoded 

code=XXXXXX& 
client_id=ZZZZZZ& 
redirect_uri=uwapp.testgoogleoauth:/oauth2redirect& 
grant_type=authorization_code 
+0

versuchte ich mein Projekt mit Änderungen, wie von Ihnen vorgeschlagen. Nun meine URL für Authentifizierungs-Token fetching aussieht - https://www.googleapis.com/oauth2/v4/token?code=4/z6KaGnF5kNvW7SwwuIcnIz8RBMh8PDUPLEXvd70Xn28#&client_id=540870778118-7ndj7unhfqhbdtgpfj35ensavmdmnor3.apps.googleusercontent.com&redirect_uri=uwapp.testgoogleoauth:/oauth2redirect&grant_type = authorization_code Aber immer noch bekomme ich den gleichen Fehler, zB 404. – Vikas

+0

@Vikas Diese Anfrage ist eine Post-Anfrage, Sie können diese Anfrage mit [HttpClient.PostAsync-Methode] (https://msdn.microsoft.com/en-us/library/windows/apps/xaml/windows.web.http .httpclient.postasync.aspx). Als ich Ihre Anfrage mit [Request Maker] (http://requestmaker.com/) getestet habe, habe ich "400 Bad Request" und "error_description": "Code wurde bereits eingelöst." Ich denke, das ist eine richtige Antwort, da Ihr Autorisierungscode verwendet wurde. –

+0

Vielen Dank Jay. Wie Sie erklärt haben, habe ich die Änderungen vorgenommen und das Problem wurde behoben. Ich bin in der Lage, die Antwort von dem Anruf zusammen mit Autorisierungs-Token zu erhalten. – Vikas