Подтвердить что ты не робот

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

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

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

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

4b9b3361

Ответ 2

Если вы используете веб-api, тогда вы должны сделать http POST вызов 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 }

Ответ 3

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

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

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

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

Ответ 4

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

Ответ 5

POST/oauth2/v4/токен

Хост: www.googleapis.com

Заголовки

Контент-длина: 163

content-type: application/x-www-form-urlencoded

RequestBody

client_secret = ************ & grant_type = refresh_token & refresh_token = sasasdsa1312dsfsdf & client_id = ************

Ответ 6

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

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

{ "Access_token": "XYZ", "token_type": "Канал", "expires_in": 3600, "refresh_token": "MnO", "создано": 1532363626}

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

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

Не

$client->setAccessToken('xyz')

И тогда, даже если ваш access_token истёк, Google access_token его сам, используя refresh_token в объекте access_token.

Ответ 7

Все, что вам нужно сделать, это отправить запрос, как показано ниже: -

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"
}

Ответ 8

Используя вызов ASP.Net Post, это сработало для меня.

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