web-dev-qa-db-fra.com

Comment générer un jeton d'accès à l'aide d'un jeton d'actualisation via l'API Google Drive?

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.

50
Niranja

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

28

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 }
24
Ashutosh Singh

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 :-)

21
amosmos

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();
2
Divyesh Kanzariya

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 = *************

1
Gaurav Bahl

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.

1
Learner

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"
}
1
Raad Altaie

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);
0
AtLeastTheresToast