Не программируй - вставляй и копируй. OAuth 2.0 авторизация API Google, получение токенов доступа (refresh и access token)

27.02.23

Интеграция - WEB-интеграция

Без программирования, в несколько кликов - простой и быстрый способ трехногой авторизации по протоколу OAuth 2.0 в Google APIs. Получение refresh и первого access token для использования в HTTP-запросах из 1С к API Google. Для приложений типа "Компьютеры".

При использовании некоторых 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". Браузер покажет необходимые токены.

scope:

client_id:

code:

client_id:

client_secret:

Если у Вас есть свой Идентификатор клиента 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

Авторизация OAuth Google API access token refresh Sheets Drive Calendar АПИ Гугл Таблицы Диск Календарь Аутентификация

См. также

Интеграция Альфа Авто 5 / Альфа Авто 6 и AUTOCRM / Инфотек

Сайты и интернет-магазины WEB-интеграция Платформа 1С v8.3 Конфигурации 1cv8 1С:Управление торговлей 11 Автомобили, автосервисы Россия Управленческий учет Платные (руб)

Интеграционный модуль обмена между конфигурацией Альфа Авто 5 и Альфа Авто 6 и порталом AUTOCRM. Данный модуль универсален. Позволяет работать с несколькими обменами AUTOCRM разных брендов в одной информационной базе в ручном и автоматическом режиме. Без существенных изменений типовой конфигурации. Проверено с брендами: Интеграция 1С и GEELY Интеграция 1С и HAVAL Интеграция 1С и KIA Интеграция 1С и FORD Интеграция 1С и LADA ГАРАНТИЯ 100% ВНЕДРЕНИЯ!

36000 руб.

03.08.2020    15655    9    17    

9

Модуль для обмена "1С:Предприятие 8. УАТ. ПРОФ" с FortMonitor

WEB-интеграция 8.3.8 Конфигурации 1cv8 Автомобили, автосервисы Беларусь Украина Россия Казахстан Управленческий учет Платные (руб)

Расширение предназначено для конфигурации "1С:Предприятие 8. Управление Автотранспортом. ПРОФ". Функционал модуля: 1. Заполнение регистров сведений по подсистеме "Мониторинг", а именно: события по мониторингу, координаты по мониторингу, пробег и расход по мониторингу, текущее местоположение ТС по мониторингу 2. Заполнение путевого листа: пробег по мониторингу, время выезда/заезда, табличная часть ГСМ, места стоянок по геозонам. 3. Отчеты по данным загруженным в регистры сведений. 4. Предусмотрена автоматическая загрузка данных в фоновом режиме (условия работы данной загрузке читайте в описании товара) Модуль работает без включенной константы по настройкам мониторинга. Модуль формы предоставляется с открытым кодом, общий модуль защищен. Любой заинтересованный пользователь, имеет возможность скачать демо-версию расширения.

22656 руб.

25.05.2021    12809    30    8    

10

Интеграция 1С — Битрикс24. Обмен задачами

Сайты и интернет-магазины Интеграция WEB-интеграция Платформа 1С v8.3 Конфигурации 1cv8 Управленческий учет Платные (руб)

Интеграция 1С и Битрикс24. Разработка имеет двухстороннюю синхронизацию 1С и Битрикс24 задачами. Решение позволяет создавать пользователя в 1С из Битрикс24 и наоборот. Данная разработка технически подходит под все основные конфигурации линейки продуктов 1С:Предприятие 8.3 (8.3.18.1289). При приобретении предоставляется 1 месяц бесплатных обновлений разработки. Доступна демо-версия продукта с подключением Вашего Битрикс24

5040 руб.

04.05.2021    17421    6    15    

13

[Расширение] БОР-Навигатор.Культура

Зарплата Бюджетный учет WEB-интеграция Обмен с ГосИС Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и кадры государственного учреждения 3 Государственные, бюджетные структуры Россия Бюджетный учет Платные (руб)

Расширение конфигурации, включающее в себя объекты, необходимые для подготовки и сдачи отчета "Штатная численность" системы "БОР-Навигатор.Культура" в программе "1С:Зарплата и кадры государственного учреждения", редакция 3.1.

8400 руб.

01.02.2019    25686    9    0    

7

Интеграция с сервисом vetmanager

WEB-интеграция Платформа 1С v8.3 Бухгалтерский учет 1С:Бухгалтерия 3.0 Бытовые услуги, сервис Платные (руб)

Внешняя обработка разрабатывалась для загрузки документов из Ветменеджер в 1С: Бухгалтерия 3.0

12000 руб.

02.02.2021    16254    41    49    

22
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. malikov_pro 1288 24.08.20 04:37 Сейчас в теме
За вариант с
name="redirect_uri" value="urn:ietf:wg:oauth:2.0:oob", нашел описание в https://developers.google.com/youtube/v3/live/guides/auth/installed-apps
благодарю.

Решаю задачу с запуском scripts, как выдать разрешения сервисному пользователю без GSuite на исполнение скрипта не нашел, через обычного пользователя заработало нормально.
OrsaMaggiore; uno-c; +2 Ответить
2. Ruschel 21.06.22 12:07 Сейчас в теме
Всем привет. Кто-то решил вопрос с авторизацией пользователя внутри 1С в ПолеHTMLДокумента с тем, что redirect_uri="urn:ietf:wg:oauth:2.0:oob" признано Google не безопасным и теперь его надо заменить на http://localhost:1 ? Пруф Зависает окно приложения в 1С и не возвращает code. Я так понял проблема связана с движком webkit
3. uno-c 234 21.06.22 23:52 Сейчас в теме
(2) Как-то WebKit зависал при получении токенов для OneDrive, в итоге в коде эски пришлось внешний браузер открывать (ПерейтиПоНавигационнойСсылке)
4. Ruschel 22.06.22 00:09 Сейчас в теме
(3) Это понятно, но в таком случае токен автоматически схватить 1Ской не получается.
5. uno-c 234 22.06.22 00:48 Сейчас в теме
(4) Приходится копипастить назад из браузера, раз вебкит тупит. Благо операция разовая. Но кто-то писал, что специально для подобных операций держит старую платформу 1С, где еще не вебкит, а ИЕ )
6. fsasha2003 23.08.22 11:18 Сейчас в теме
Хотел написать про свой опыт получения данных для подключения после изменений правил Google в отношении безопасности OAuth 2.0. Возможно кому-то пригодится.
4 мая я получил письмо счастья от гугл, что мой Desktop Client OAuth будет заблокирован 3 октября. У меня есть 1 Desktop Client (через который всегда и работал) и 1 Web Client (его не использовал). Принцип “Работает - не трогай” никто не отменял, так что не решился экспериментировать с существующим Desktop Client, тем более что через него постоянно идут соединения. Создавать еще один Desktop Client не решился, т.к. побоялся а вдруг может быть только один и перестанет работать действующий (Хотя потом прочитал сообщения пользователя, у которого 3 Desktop Client). В итоге раз у меня уже заведен Web Client решил использовать его. Как обычно для него надо сначала получить код доступа, но если раньше указывалось “&redirect_uri=urn:ietf:wg:oauth:2.0:oob”, то теперь надо исправить, например, на "&redirect_uri=http://localhost:1". И что важно надо нажать на Web Client в Credentials, чтоб провалиться в настройки и добавить http://localhost:1 в “Authorized redirect URIs”. Опять же в Desktop Client указать “Authorized redirect URIs” нельзя. Но когда скачиваешь json для Desktop Client в нем указано "redirect_uris":["http://localhost"]. Так что возможно для Desktop Client необходимо указывать "&redirect_uri=http://localhost", но это мое предположение - я не тестировал. Итак, после внесения в “Authorized redirect URIs” и сохранения настроек не забудьте подождать минут 5-7. После этого вводите полученный url в браузере, сначала как обычно будет окно где нужно подтвердить разрешение для аккаунта. А вот потом обычного окна с кодом доступа не будет. Надо скопировать url в строке браузера. код доступа будет в строке между “code=” и “&scope”.Затем как обычно получаем токены, также не забудьте исправить в строке на "&redirect_uri=http://localhost:1"; Вот и все.
7. uno-c 234 17.10.22 00:14 Сейчас в теме
(6) Идентификатор клиента OAuth-2 типа "Компьютеры" (OAuth 2.0 Client ID Type Desktop) тоже работает c http://localhost. Сделал файл loopback.html почти такой же как в статье, только "urn:ietf:wg:oauth:2.0:oob" заменил на "http://localhost:1" Нестандартный порт :1 мне нужен, т.к. на стандартном у меня работает XAMPP и автоматом переадресует браузер с несуществующей страницы на главную, после чего "code=" не видно.

В итоге Гугл переадресовал браузер на несуществующую страницу http://localhost:1/?code=4/0ARtbsJqvbvyOQ6kZXcVPtv8vshmkkuXutKcnrcuntr26aEERG2lG­Rsl6pzUUlVaLPLqX2w&scope=https://www.googleapis.com/auth/drive.appdata%20https://www.googleapis.com/auth/drive.file%20https://www.googleapis.com/auth/calendar.settings.readonly
Браузер, конечно, ругнулся, что веб-страница недоступна, но адресная строка браузера в целости. Кликаем мышкой в адресную строку браузера, чтобы "проявились" подробности, и становится очевидно значение требуемого code, т.е. 4/0ARtbsJqvbvyOQ6kZXcVPtv8vshmkkuXutKcnrcuntr26aEERG2lGRsl6p­zUUlVaLPLqX2w

файл loopback.html прикрепил
Прикрепленные файлы:
loopback.html
8. maksa2005 528 23.08.23 14:41 Сейчас в теме
9. Barok 19.12.23 12:27 Сейчас в теме
Здравствуйте. refresh_token примерно через неделю перестаёт работать и приходится получать новый. Подскажите, в чем может быть причина?
10. uno-c 234 19.12.23 13:10 Сейчас в теме
(9) Здравствуйте. Возможно, Application type для OAuth client ID не Desktop app выбран. См. https://console.cloud.google.com/apis/credentials
Прикрепленные файлы:
13. Barok 15.01.24 14:08 Сейчас в теме
(10)
тут выбран Desktop
Прикрепленные файлы:
11. uno-c 234 11.01.24 03:55 Сейчас в теме
(9) Еще вариант https://developers.google.com/identity/protocols/oauth2?hl=ru#expiration

Проекту Google Cloud Platform с экраном согласия OAuth, настроенным для внешнего типа пользователя и статусом публикации «Тестирование», выдается токен обновления, срок действия которого истекает через 7 дней, если только запрашиваемые области действия OAuth не включают подмножество имени, адреса электронной почты и профиль пользователя (через userinfo.email, userinfo.profile, openid или их эквиваленты OpenID Connect ).


Хотя перевод на мой взгляд неверный, если читать английскую версию (unless the only OAuth scopes requested are a subset of...) - то я бы прочитал "за исключением, если единственными запрашиваемыми областями являются ..." Т.е. читая русский перевод документации, можно подумать, что достаточно, например, к scope spreadsheets запросить дополнительно userinfo.email - и ограничение 7 дней уйдет. А если читать английский док - то ограничения 7 дней не будет если кроме userinfo.email, userinfo.profile больше ничего не запрашивается.
12. Barok 15.01.24 14:05 Сейчас в теме
(11)
выбраны только эти скоупы. Причём у меня есть второй проект для другой организации всё точь в точь (ну я так думаю) и там норм работает. И вот не могу понять причину почему выдаёт рефреш только на неделю
Прикрепленные файлы:
14. uno-c 234 15.01.24 19:01 Сейчас в теме
(12)
второй проект для другой организации всё точь в точь (ну я так думаю) и там норм работает
И оба в статусе тестирования?
Прикрепленные файлы:
15. Barok 17.01.24 13:19 Сейчас в теме
(14)
оба в статусе тестирования, но первый проект создавал на год раньше, видимо тогда не было ограничений на срок действия рефреша. Перевел второй проект в паблик, посмотрим через недельку как будет. Постараюсь отписать результат
16. Barok 01.02.24 11:52 Сейчас в теме
(14)
(11)
Собственно перевод в паблик решил ситуацию со вторым проектом. Видимо сейчас политика Гугла такая, что в тестовом моде только на неделю ключи, первый проект работает в тесте, потому как успел еще по старым правилам получить с неограниченным сроком
Оставьте свое сообщение