Не программируй - вставляй и копируй. 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 разных брендов в одной информационной базе в ручном и автоматическом режиме.

36000 руб.

03.08.2020    15935    13    18    

13

Интеграция 1С с облаком S3 (Amazon, Yandex Object Storage, Ceph Object Gateway S3, MinIO и др.)

Облачные сервисы, хостинг 8.3.14 Конфигурации 1cv8 Россия Платные (руб)

Готовое решение по интеграции 1С с облаком S3 (Amazon, Yandex Object Storage, Ceph Object Gateway S3, MinIO и любое совместимое объектное хранилище). Решение даёт возможность осуществлять как основные операции (получить список, закачать, скачать, удалить и т.д.), так и расширенные (работа с бакетами, генерация ссылок, работа с правами и т.д.) с объектным хранилищем S3 прямо из 1С.

31200 руб.

27.04.2021    18553    24    70    

39

Интеграция 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    17890    6    15    

12

Заполнение по ИНН или наименованию реквизитов контрагента по данным сайта ФНС

Обмен с ГосИС WEB-интеграция Платформа 1С v8.3 Управляемые формы 1С:Комплексная автоматизация 1.х 1С:Бухгалтерия 2.0 1С:Управление торговлей 10 1С:Управление производственным предприятием 1С:Управление нашей фирмой 1.6 1С:Бухгалтерия государственного учреждения 1С:Документооборот 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Платные (руб)

Обработка является альтернативой механизму, разработанному фирмой 1С и заполняющему реквизиты контрагента по ИНН или наименованию. Не требуется действующей подписки ИТС. Вызывается как внешняя дополнительная обработка, т.е. используется, непосредственно, из карточки контрагента. Заполнение по ИНН или наименованию реквизитов контрагента по данным сайта ФНС (egrul.nalog.ru) для БП 2.0, БП 3.0, БГУ 1.0, БГУ 2.0, УТ 10.3, УТ 11.x, КА 1.1, КА 2.x, УПП 1.x, ERP 2.x, УНФ 1.5, УНФ 1.6, УНФ 3.0, ДО 2.1

2400 руб.

28.04.2016    88948    163    216    

318

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

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

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

8400 руб.

01.02.2019    25874    9    0    

7
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. malikov_pro 1293 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 235 21.06.22 23:52 Сейчас в теме
(2) Как-то WebKit зависал при получении токенов для OneDrive, в итоге в коде эски пришлось внешний браузер открывать (ПерейтиПоНавигационнойСсылке)
4. Ruschel 22.06.22 00:09 Сейчас в теме
(3) Это понятно, но в таком случае токен автоматически схватить 1Ской не получается.
5. uno-c 235 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 235 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 534 23.08.23 14:41 Сейчас в теме
9. Barok 19.12.23 12:27 Сейчас в теме
Здравствуйте. refresh_token примерно через неделю перестаёт работать и приходится получать новый. Подскажите, в чем может быть причина?
10. uno-c 235 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 235 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 235 15.01.24 19:01 Сейчас в теме
(12)
второй проект для другой организации всё точь в точь (ну я так думаю) и там норм работает
И оба в статусе тестирования?
Прикрепленные файлы:
15. Barok 17.01.24 13:19 Сейчас в теме
(14)
оба в статусе тестирования, но первый проект создавал на год раньше, видимо тогда не было ограничений на срок действия рефреша. Перевел второй проект в паблик, посмотрим через недельку как будет. Постараюсь отписать результат
16. Barok 01.02.24 11:52 Сейчас в теме
(14)
(11)
Собственно перевод в паблик решил ситуацию со вторым проектом. Видимо сейчас политика Гугла такая, что в тестовом моде только на неделю ключи, первый проект работает в тесте, потому как успел еще по старым правилам получить с неограниченным сроком
Оставьте свое сообщение