Не программируй - вставляй и копируй. 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 АПИ Гугл Таблицы Диск Календарь Аутентификация

См. также

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

Онлайн-заказ - это решение для автоматизации процесса оформления заказов на сайте в торговых организациях. Продукт обеспечивает легкое взаимодействие между компанией и клиентами через веб-интерфейс, интегрированный с 1С:Предприятие. Система позволяет снизить операционные расходы, повысить лояльность клиентов и оптимизировать работу отдела продаж.

57600 руб.

26.11.2024    5500    4    3    

7

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

Модуль "Экспортер" — это расширение для 1С, предназначенное для автоматизации процессов выгрузки данных. Оно позволяет эффективно извлекать, преобразовывать и передавать данные из систем 1С в интеграционную платформу Spot2D. Подсистема упрощает настройку, снижает количество ручных операций и обеспечивает удобный контроль данных.

14400 руб.

20.12.2024    2982    16    2    

17

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

Модуль "Подсистема интеграции AmoCRM с 1С" позволяет обеспечить единое информационное пространство, в котором пользователи могут эффективно управлять клиентской базой, следить за статусами сделок и поддерживать актуальность данных как в AmoCRM, так и в 1С.

60000 руб.

07.05.2019    38085    73    45    

31

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

В расширении реализован механизм интеграции между системой поставщика и Личным кабинетом СДТ. Реализован обмен заказами и реализациями (накладными), предусмотрено отслеживание статусов документов. Расширение предназначено для 1С:УТ 11.4.

35856 руб.

27.11.2024    1535    1    0    

1

Обмен с ГосИС 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

3000 руб.

28.04.2016    96737    109    218    

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

мне решение с переводом на паблик не помогло =(


ПРоблема
Через определенный промежуток времени (около недели) Access token и Refresf token автоматически удаляются из системы, после чего процесс интеграции больше не может быть завершен, и нам приходится вручную обновлять токены каждый раз (с помощью кнопки).

После удаления токенов, всякий раз при обновлении, Google будет снова спрашивать нас, чтобы мы согласились разрешить доступ к Google Drive из системы.

Наш вопрос в том, что мы хотим иметь постоянный Access token и Refresh token, чтобы нам не приходилось вручную обновлять его каждый раз.
Нам интересно, возможно ли это или у вас есть другой способ решить эту проблему?

Со своей стороны, конечно, мы также пытались внести небольшие изменения в систему и исправить полученные Access token и Refresf token, но поскольку эти токены динамические и обновляются, интеграция столкнулась с проблемой, когда токены истекли.

Я еще раз подчеркну нашу проблему: она связана с удалением токенов из системы и их ручным обновлением.
Есть ли у вас опыт решения этой проблемы? Можем ли мы использовать постоянные токены или сделать так, чтобы они автоматически обновлялись, чтобы Google не просил нас каждый раз предоставлять доступ к
Прикрепленные файлы:
18. uno-c 268 20.06.25 14:12 Сейчас в теме
(17) У Вас какой тип приложения? Смотреть здесь: https://console.cloud.google.com/apis/credentials
Прикрепленные файлы:
19. user2150375 20.06.25 17:57 Сейчас в теме
(18) добрый день!
да:


p.s. прикольный ник
Прикрепленные файлы:
20. user2150375 20.06.25 18:01 Сейчас в теме
(18)
вот прикладываю письмо у участками кода от разраба
мб это как то поможет
Прикрепленные файлы:
stock exchange between 1C and Gsheets (1).eml
Для отправки сообщения требуется регистрация/авторизация