У меня проблема с обменом ключом аутентификации Google (для автономного доступа) с токенами доступа / обновления.
Когда я вызываю API для получения токенов, я всегда получаю ошибку «invalid_grant».
Я могу предоставить исходный код страницы OAuth (откуда я беру этот код):
https://pastebin.com/uAS86bj9
gapi.client.init({
apiKey: apiKey,
clientId: clientId,
scope: scopes
})
.....
var user = data.getAuthInstance().currentUser.get();
user.grantOfflineAccess({
}).then(function (resp) {
$('#content').append('<br>code: ' + resp.code); // <-- this is the code
});
и (с гораздо большим количеством экспериментов и множеством странных вещей):
https://pastebin.com/JDhf88qd
Я уже пытался:
- использовать redirect_uri
- синхронизировать время с NTP
- двойная проверка клиентов и клиентов
Лучшее объяснение:
У меня есть собственное приложение с классическим «логином через Google» (которое отлично работает). Теперь мне нужен ключ авторизации для олицетворения пользователя из серверного приложения (для загрузки данных Fitness).
Итак, я попробовал две вещи, обе с одинаковым результатом:
user.grantOfflineAccess
Обещание фактически возвращает мне код авторизации.
Второе, что я попробовал, это позвонить:
var link = 'https://accounts.google.com/o/oauth2/v2/auth?redirect_uri={url}&response_type=code&client_id='+ clientId +'&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Ffitness.body.read&access_type=offline';
window.open(link);
и беру код, полученный от этого перенаправления.
Теперь мне нужно (в моем серверном приложении) получить access_token и refresh_token с серверов Google. Я только симулирую это с почтальоном, я буду выполнять запросы с помощью другого инструмента.
Итак, я сейчас пытаюсь позвонить
POST https://accounts.google.com/o/oauth2/token
или
POST https://www.googleapis.com/oauth2/v4/token
с этими данными:
code={thecode}&client_id={ClientId}.apps.googleusercontent.com&client_secret={ClientSecret}&redirect_uri={url}&grant_type=authorization_code
но я получаю сообщение "invalid_grant"