Вопрос по google-drive-sdk, authorization – Как создать токен доступа с помощью обновления токена через Google Drive API?

46

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

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

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

Ваш Ответ

6   ответов
19

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

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

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

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

26

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

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

Я не хотел воплощать это сам. Может кто-нибудь предоставить пример кода с помощью Google API?
@ClaudioCherubino .. прошу прощения, что прерываю вас, но не могли бы вы сказать мне, пожалуйста. Можно ли получить авторизованный URL-адрес Google Drive, который может быть использован публично, как воспроизведение аудио и видео с браузером пр плеер ... в iOS
Упомянутые вами документы касаются только связи по Raw-HTTP. Есть ли в PHP-API метод для обновления токенов?
Проверьтеdevelopers.google.com/drive/credentials
2

Если вы используете 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();
20

Если вы используете веб-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 }
работая прагматично с httpclient, не работая с почтальоном в некоторых случаях.
Кажется, это правильное направление, но оно не работает и для меня. Я задал здесь вопрос с подробной информацией, если кто-то может помочь:stackoverflow.com/questions/48775759/…
Пожалуйста, попробуйте тело запроса как x-www-form-urlencoded.
1

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

Прежде всего, две очень полезные ссылки, связанные с 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 объект.

1

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

Похожие вопросы