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.
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
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 }
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 :-)
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();
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 = ************
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.
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"
}
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);