web-dev-qa-db-ger.com

Wie wird ein Zugriffstoken mit einem Aktualisierungstoken über die Google Drive-API generiert?

Ich habe die Autorisierungsschritte ausgeführt und Zugriffs- und Aktualisierungstoken erhalten.

Was soll ich als Nächstes tun, um ein Zugriffstoken mit einem Aktualisierungstoken zu generieren, das ich über die Google Drive-API gespeichert habe?

Ich kann kein SDK verwenden, da ich an Force.com arbeite. Schlagen Sie daher die Möglichkeit vor, es direkt über die API zu implementieren.

50
Niranja

Wenn Sie dies selbst implementieren möchten, ist der OAuth= 2.0-Fluss für Webserveranwendungen unter https://developers.google.com/accounts/docs/OAuth2WebServer dokumentiert Insbesondere sollten Sie den Abschnitt über die Verwendung eines Aktualisierungstokens lesen:

https://developers.google.com/accounts/docs/OAuth2WebServer#refresh

28

Wenn Sie eine Web-API verwenden, sollten Sie einen http POST -Aufruf an URL durchführen: https://www.googleapis.com/oauth2/v4/token mit folgendem Anfragetext

client_id: <YOUR_CLIENT_ID>
client_secret: <YOUR_CLIENT_SECRET>
refresh_token: <REFRESH_TOKEN_FOR_THE_USER>
grant_type: refresh_token

der Aktualisierungstoken läuft nie ab, sodass Sie ihn beliebig oft verwenden können. Die Antwort wird ein JSON wie folgt sein:

{ access_token: 'ya....', token_type: 'Bearer', expires_in: 3599 }
24
Ashutosh Singh

Es ist eine alte Frage, aber sie scheint mir nicht vollständig beantwortet zu sein, und ich brauchte diese Informationen auch, damit ich meine Antwort posten kann.

Wenn Sie die Google Api-Clientbibliothek verwenden möchten, benötigen Sie lediglich ein Zugriffstoken, das das Aktualisierungstoken enthält. Obwohl das Zugriffstoken nach einer Stunde abläuft, aktualisiert die Bibliothek das Token für Sie automatisch.

Um ein Zugriffstoken mit einem Aktualisierungstoken zu erhalten, müssen Sie nur nach dem Offline-Zugriffstyp fragen (z. B. in PHP: $client->setAccessType("offline");), und Sie erhalten ihn. Denken Sie daran, dass Sie das Zugriffstoken mit dem Aktualisierungstoken nur bei der ersten Autorisierung erhalten. Speichern Sie das Zugriffstoken also beim ersten Mal und Sie können es jederzeit verwenden.

Hoffe das hilft jedem :-)

21
amosmos

Wenn Sie Java verwenden, folgen Sie dem folgenden Codeausschnitt:

GoogleCredential refreshTokenCredential = new GoogleCredential.Builder().setJsonFactory(JSON_FACTORY).setTransport(HTTP_TRANSPORT).setClientSecrets(CLIENT_ID, CLIENT_SECRET).build().setRefreshToken(yourOldToken);
refreshTokenCredential.refreshToken(); //do not forget to call this
String newAccessToken = refreshTokenCredential.getAccessToken();
2

POST/oauth2/v4/token

Host: www.googleapis.com

Header

Inhaltslänge: 163

inhaltstyp: application/x-www-form-urlencoded

RequestBody

client_secret = ************ & grant_type = refresh_token & refresh_token = sasasdsa1312dsfsdf & client_id = ************

1
Gaurav Bahl

Poste einfach meine Antwort, falls es jemandem hilft, da ich eine Stunde gebraucht habe, um es herauszufinden :)

Zunächst zwei sehr hilfreiche Links zu Google API und zum Abrufen von Daten von einem der Google-Dienste:

https://developers.google.com/analytics/devguides/config/mgmt/v3/quickstart/web-php

https://developers.google.com/identity/protocols/OAuth2WebServer

Darüber hinaus bei Verwendung der folgenden Methode:

$client->setAccessToken($token)

Der $token Muss das vollständige Objekt sein, das von Google zurückgegeben wird, wenn eine Autorisierungsanfrage gestellt wird, und nicht der einzige access_token, Den Sie im Objekt erhalten. Wenn Sie also das Objekt erhalten, können Sie sagen:

{"access_token": "xyz", "token_type": "Bearer", "expires_in": 3600, "refresh_token": "mno", "created": 1532363626}

dann musst du geben:

$client->setAccessToken('{"access_token":"xyz","token_type":"Bearer","expires_in":3600,"refresh_token":"mno","created":1532363626}')

Nicht

$client->setAccessToken('xyz')

Und selbst wenn Ihr access_token Abgelaufen ist, aktualisiert sich Google selbst, indem Sie den refresh_token Im access_token - Objekt verwenden.

1
Learner

Alles, was Sie tun müssen, ist eine Post-Anfrage wie folgt: -

POST https://www.googleapis.com/oauth2/v4/token
Content-Type: application/json

{
  "client_id": <client_id>,
  "client_secret": <client_secret>,
  "refresh_token": <refresh_token>,
  "grant_type": "refresh_token"
}
1
Raad Altaie

Bei Verwendung von ASP.Net Post Call hat dies bei mir funktioniert.

StringBuilder getNewToken = new StringBuilder();
getNewToken.Append("https://www.googleapis.com/oauth2/v4/token");                        
HttpClient client = new HttpClient();
client.BaseAddress = new Uri(getNewToken.ToString());
                    var values = new Dictionary<string, string>
                    {
                        { "client_id", <Your Client Id> },
                        { "client_secret", <Your Client Secret> },
                        { "refresh_token", <Your Saved Refresh Token> },
                        { "grant_type", "refresh_token"}
                    };

                    var content = new FormUrlEncodedContent(values);
                    var response = await client.PostAsync(getNewToken.ToString(), content);
0