Как создать токен доступа с использованием токена обновления через API-интерфейс Google?
Я выполнил шаги авторизации и получил токен доступа и обновил токен.
Что мне делать дальше, чтобы генерировать токен доступа, используя токен обновления, который я сохранил через API-интерфейс Google?
Я не смогу использовать какой-либо sdk, поскольку я работаю на Force.com, поэтому, пожалуйста, предложите способ реализовать его непосредственно через API.
Ответы
Ответ 1
Если вы хотите реализовать это самостоятельно, поток OAuth 2.0 для приложений веб-сервера документируется на https://developers.google.com/accounts/docs/OAuth2WebServer, в частности, вы должны проверить раздел об использовании Обновить токен:
https://developers.google.com/accounts/docs/OAuth2WebServer#refresh
Ответ 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);