При использовании некоторых API Google (например Sheets API, Calendar API, Drive API) - в HTTP-запросах необходимо указывать заголовок "Authorization:Bearer {access_token}". Когда я знакомился с Google Sheets API, то отметил, что уйдет далеко не пара минут на изучение и программирование процесса получения токена, который позволяет обратиться к этому API. Причем refresh token выдается раз и практически навсегда. Получается, нужно тратить время на программирование того, что понадобится один раз. Предлагаю быстрый способ получения refresh и первого access токенов вообще без программирования. Работает для приложений типа "Компьютеры".
Можете попробовать прямо здесь. Нажмите "Get code", войдите/выберите свой аккаунт гугл, разрешите доступ, из адресной строки открывшейся несуществующей страницы скопируйте код (текст между code= и &scope), вставьте полученный код в зеленое поле "code:" и нажмите "Get tokens". Браузер покажет необходимые токены.
Если у Вас есть свой Идентификатор клиента OAuth 2.0 типа "Компьютеры" (что у Вас есть - смотрите в https://console.developers.google.com/apis/credentials), то можете вставить сюда свои scope, client_id (в 2 поля), client_secret - и получить свои токены. Или создайте новые учетные данные с типом "Приложение для ПК" по этой же ссылке, определитесь с нужными API и scope - и пробуйте.
Вкратце на этом всё, процесс закончен.
Но если пробовать здесь не хотите - можете создать у себя текстовый файл с расширением html следующего содержания:
<!DOCTYPE HTML>
<html>
<head>
<style type="text/css">
.danstyle {}
.danstyle label {
display: inline-block;
width: 100px;
}
.danstyle input {
width: 500px;
}
</style>
</head>
<body>
<form class="danstyle" target="_blank" action="https://accounts.google.com/o/oauth2/v2/auth" enctype="application/x-www-form-urlencoded" method="post">
<p><label>scope:</label><input type="text" name="scope" value="https://www.googleapis.com/auth/calendar.settings.readonly https://www.googleapis.com/auth/drive.file https://www.googleapis.com/auth/drive.appdata"></p>
<p><label>client_id:</label><input type="text" name="client_id" value="1043317717582-spu6uac6ajeu4kht399nabq41jrh4nub.apps.googleusercontent.com"></p>
<input type="hidden" name="redirect_uri" value="http://localhost:13579">
<input type="hidden" name="response_type" value="code">
<input type="hidden" name="prompt" value="select_account">
<p><input style=width:80px; type="submit" value="Get code"></p>
</form>
<hr style="border: 1px solid #49423d;" size="0">
<form class="danstyle" action="https://oauth2.googleapis.com/token" enctype="application/x-www-form-urlencoded" method="post">
<p><label>code:</label><input style="background-color: #90ee90;" type="text" name="code"></p>
<p><label>client_id:</label><input type="text" name="client_id" value="1043317717582-spu6uac6ajeu4kht399nabq41jrh4nub.apps.googleusercontent.com"></p>
<p><label>client_secret:</label><input type="text" name="client_secret" value="1dEoQ9sdUgsqcQahYz3nP9dk"></p>
<input type="hidden" name="redirect_uri" value="http://localhost:13579">
<input type="hidden" name="grant_type" value="authorization_code">
<p><input style=width:80px; type="submit" value="Get tokens"></p>
</form>
<hr style="color: #49423d;">
</body>
</html>
Сохраняем html-файл (я назвал его GoogleOauth.html), открываем его в интернет-браузере.
Первым делом жмем кнопку "Get code". Если в браузере Вы еще не входили в аккаунт гугл - предложат войти. Если входили - откроется страница выбора аккаунта. К данным этого аккаунта мы предоставляем доступ приложению:
Кликаем аккаунт, отвечаем "Разрешить" на вопросы, откроется экран согласия (consent screen):
Отмечаем галками разрешения, жмем кнопку "Продолжить" - попадаем на страницу с кодом (такое работало раньше, теперь Гугл запретил, в следующей строке текста Новый вариант):
Новый вариант: после нажатия кнопки "Продолжить" откроется несуществующая страница, нас интересует содержимое адресной строки браузера. В адресной строке копируем нужный нам код - это текст между code= и &scope, как на картинке:
Копируем полученный код, возвращаемся к странице с нашим файлом GoogleOauth.html, вставляем в зеленое поле "code:" полученный код:
Наконец, нажимаем кнопку "Get tokens". В итоге браузер перейдет на страницу, где будет выведен текст JSON следующего содержания:
В результате мы получили "вечный" refresh_token и временный access_token, которые далее используем в запросах к API Google.
В примере выше для демонстрации по умолчанию подставляются client_id, client_secret и минимальные scope от моей тестовой учетки. Свою учетку Вы можете создать в консоли разработчика https://console.developers.google.com/apis/credentials , вверху страницы кликните "+ СОЗДАТЬ УЧЕТНЫЕ ДАННЫЕ" - "Идентификатор клиента OAuth" - тип приложения "Приложение для ПК".
После создания гугл выдаст client_id и client_secret - их и нужно вставить в браузер, в рассмотренную выше форму GoogleOauth.html Обратите внимание, client_id нужно вставить два раза в два одноименных поля. После вставки своих client_id client_secret а также необходимых Вам scope - производим все клики и получаем рабочие токены.
Немного о scope, которые мы видим в форме. Здесь нужно указать API-scope, необходимые для Вашего приложения. Перечень существующих scope можно посмотреть на странице https://developers.google.com/identity/protocols/oauth2/scopes , а scope необходимые в работе конкретного API - в инструкциях к этому API. Scope указываются через пробел. В Вашем проекте должны быть подключены API, соответствующие запрашиваемым scope, иначе отобразится ошибка.
access_token живет один час, потом надо брать свежий. Для этого нужно из 1С выполнить HTTP-запрос с предъявлением "вечного" refresh_token - и Вам выдадут очередной access_token: https://developers.google.com/identity/protocols/oauth2/native-app?hl=ru#offline