J'ai terminé les étapes d'autorisation et obtenu un jeton d'accès et un jeton d'actualisation.
Que dois-je faire ensuite pour générer un jeton d'accès à l'aide d'un jeton d'actualisation que j'ai stocké via l'API Google Drive?
Je ne serai pas en mesure d'utiliser de sdk puisque je travaille sur Force.com, alors veuillez suggérer le moyen de le mettre en œuvre directement via l'API.
Si vous souhaitez implémenter cela vous-même, le flux OAuth 2.0 pour les applications de serveur Web est documenté à l'emplacement https://developers.google.com/accounts/docs/OAuth2WebServer , en particulier vous devriez consulter la section sur l’utilisation d’un jeton d’actualisation:
https://developers.google.com/accounts/docs/OAuth2WebServer#refresh
Si vous utilisez une API Web, vous devez alors appeler http POST
vers l'URL: https://www.googleapis.com/oauth2/v4/token
avec le corps de requête suivant
client_id: <YOUR_CLIENT_ID>
client_secret: <YOUR_CLIENT_SECRET>
refresh_token: <REFRESH_TOKEN_FOR_THE_USER>
grant_type: refresh_token
le jeton d'actualisation n'expire jamais, vous pouvez donc l'utiliser plusieurs fois. La réponse sera un JSON comme ceci:
{ access_token: 'ya....', token_type: 'Bearer', expires_in: 3599 }
C'est une vieille question mais il me semble que la réponse n'a pas été complète et que j'avais besoin de cette information aussi, alors je posterai ma réponse.
Si vous souhaitez utiliser la bibliothèque client Google Api, vous devez disposer d'un jeton d'accès contenant le jeton d'actualisation, puis, même si le jeton d'accès expirera au bout d'une heure, la bibliothèque l'actualisera pour vous. automatiquement.
Pour obtenir un jeton d'accès avec un jeton d'actualisation, il vous suffit de demander le type d'accès hors connexion (par exemple en PHP: $client->setAccessType("offline");
) et vous l'obtiendrez. Gardez simplement à l'esprit que vous obtiendrez le jeton d'accès avec le jeton d'actualisation uniquement lors de la première autorisation. Veillez donc à enregistrer ce jeton lors de la première utilisation afin de pouvoir l'utiliser à tout moment.
J'espère que ça aide quelqu'un :-)
Si vous utilisez Java, suivez l’extrait de code ci-dessous:
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/jeton
hôte: www.googleapis.com
en-têtes
Longueur du contenu: 163
content-type: application/x-www-form-urlencoded
RequestBody
client_secret = ************ & grant_type = refresh_token & refresh_token = sasasdsa1312dsfsdf & client_id = *************
Il suffit de poster ma réponse au cas où cela aiderait quelqu'un, car j'ai passé une heure à le résoudre :)
Tout d’abord, deux liens très utiles relatifs à Google Api et à la récupération de données depuis l’un des services Google:
https://developers.google.com/analytics/devguides/config/mgmt/v3/quickstart/web-php
https://developers.google.com/identity/protocols/OAuth2WebServer
De plus, lorsque vous utilisez la méthode suivante:
$client->setAccessToken($token)
Le $token
Doit être l'objet complet renvoyé par Google lors de la demande d'autorisation, et non le seul access_token
Que vous obtenez à l'intérieur de l'objet. Par conséquent, si vous obtenez l'objet, dites:
{"access_token": "xyz", "token_type": "Bearer", "expires_in": 3600, "refresh_token": "mno", "créé": 1532363626}
alors vous devez donner:
$client->setAccessToken('{"access_token":"xyz","token_type":"Bearer","expires_in":3600,"refresh_token":"mno","created":1532363626}')
Ne pas
$client->setAccessToken('xyz')
Et même si votre access_token
Est expiré, Google le rafraîchit lui-même en utilisant le refresh_token
Dans l'objet access_token
.
Tout ce que vous avez à faire est une demande de publication comme ci-dessous: -
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"
}
En utilisant ASP.Net Post call, cela a fonctionné pour moi.
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);