Как создать токен доступа с помощью обновления токена через Google Drive API?

Я выполнил шаги авторизации и получил токен доступа и токен обновления.

Что мне делать дальше, чтобы сгенерировать токен доступа, используя токен обновления, который я сохранил через API Google Drive?

Я не смогу использовать любой sdk, так как работаю над Force.com, поэтому, пожалуйста, предложите способ реализовать его напрямую через API.

Ответы на вопрос(6)

Это старый вопрос, но, как мне кажется, он не был полностью дан ответ, и я тоже нуждался в этой информации, поэтому я опубликую свой ответ.

Если вы хотите использовать клиентскую библиотеку Google Api, вам просто нужно иметь токен доступа, который включает в себя токен обновления, а затем - даже если срок действия токена доступа истечет через час - библиотека обновит токен для вас. автоматически.

Чтобы получить токен доступа с токеном обновления, вам просто нужно запросить тип автономного доступа (например, в PHP:$client->setAccessType("offline");) и вы получите это. Помните, что вы получите токен доступа с токеном обновления только при первой авторизации, поэтому обязательно сохраните этот токен доступа в первый раз, и вы сможете использовать его в любое время.

Надеюсь, что это кому-нибудь поможет :-)

Решение Вопроса

Если вы хотите реализовать это самостоятельно, документируйте поток OAuth 2.0 для приложений веб-сервера по адресуhttps://developers.google.com/accounts/docs/OAuth2WebServerВ частности, вы должны проверить раздел об использовании токена обновления:

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

 15 окт. 2013 г., 21:59
Я не хотел воплощать это сам. Может кто-нибудь предоставить пример кода с помощью Google API?
 07 дек. 2012 г., 14:08
Упомянутые вами документы касаются только связи по Raw-HTTP. Есть ли в PHP-API метод для обновления токенов?
 23 сент. 2013 г., 09:28
@ClaudioCherubino .. прошу прощения, что прерываю вас, но не могли бы вы сказать мне, пожалуйста. Можно ли получить авторизованный URL-адрес Google Drive, который может быть использован публично, как воспроизведение аудио и видео с браузером пр плеер ... в iOS
 07 дек. 2012 г., 18:50

Если вы используете Java, следуйте приведенному ниже фрагменту кода:

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();

Если вы используете веб-API, то вы должны сделать httpPOST позвонить по URL:https://www.googleapis.com/oauth2/v4/token  со следующим телом запроса

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

токен обновления никогда не истекает, поэтому вы можете использовать его любое количество раз. Ответ будет в формате JSON:

{ access_token: 'ya....', token_type: 'Bearer', expires_in: 3599 }
 06 авг. 2017 г., 09:33
Пожалуйста, попробуйте тело запроса как x-www-form-urlencoded.
 28 мая 2017 г., 01:25
работая прагматично с httpclient, не работая с почтальоном в некоторых случаях.
 14 февр. 2018 г., 10:39
Кажется, это правильное направление, но оно не работает и для меня. Я задал здесь вопрос с подробной информацией, если кто-то может помочь:stackoverflow.com/questions/48775759/…

Просто опубликовать мой ответ на случай, если он кому-нибудь поможет, так как я потратил час, чтобы понять это

Прежде всего, две очень полезные ссылки, связанные с Google API и получения данных из любой из служб Google:

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

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

Кроме того, при использовании следующего метода:

$client->setAccessToken($token)

$token должен быть полный объект, возвращаемый Google при создании запроса авторизации, а не единственныйaccess_token который вы получаете внутри объекта, так что если вы получаете объект, скажем:

{& Quot; access_token & Quot;: & Quot; хуг & Quot;, & Quot; token_type & Quot;: & Quot; Канал & Quot;, & Quot; expires_in & Quot;: 3600, & Quot; refresh_token & Quot;: & Quot; MnO & Quot;, & Quot; создано & Quot;: 1532363626}

тогда вам нужно дать:

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

Не

$client->setAccessToken('xyz')

И тогда даже если вашaccess_token истек, Google обновит его сам с помощьюrefresh_token вaccess_token объект.

POST / oauth2 / v4 / token

Host: www.googleapis.com

Headers

Длина контента: 163

тип содержимого: application / x-www-form-urlencoded

RequestBody

client_secret = ************ & амп; grant_type = refresh_token & амп; refresh_token = sasasdsa1312dsfsdf & амп; client_id = ************

Ваш ответ на вопрос