OAuth2 авторизация по-простейшему для роботов

25.02.23

Администрирование - Информационная безопасность

В процессе работы программистом 1С у меня иногда возникали задачи интеграции с системами, использующими OAuh2 (Zoho Books, Google, Yandex и прочие). Причем часто нужно делать автоматические обмены с этими системами, не подразумевающих участия пользователя. OAuth2 несколько более сложная система доступа, чем пара логин-пароль. К сожалению, некоторые системы полностью отказались от доступа по паролям приложений, и приходится использовать модные новые способы доступа с прокладкой в виде пользователя посредине. Попробую объяснить ее суть и простейший способ реализации для интеграции. Цель статьи - объяснить, как получить постоянный доступ для роботов к системам, у которых нет паролей приложения, а есть только OAuth2.

В процессе работы программистом 1С у меня иногда возникали задачи интеграции с системами, использующими OAuh2 (Zoho Books, Google, Yandex и прочие). Причем часто нужно делать автоматические обмены с этими системами, не подразумевающих участия пользователя.

OAuth2 несколько более сложная система доступа, чем пара логин-пароль. К сожалению, некоторые системы полностью отказались от доступа по паролям приложений и приходится использовать модные новые способы доступа с прокладкой в виде пользователя посредине. Попробую объяснить ее суть и простейший способ реализации для интеграции. Цель статьи объяснить как получить постоянный доступ для роботов к системам, у которых нет паролей приложения, а есть только OAuth2.

Участники процесса авторизации:

  1. Интегрируемая система (ZB, Google и т.п.) — далее Система.
  2. Приложение — приложение, которое пытается получить доступ к интегрируемой системе. Это может быть сайт, а может быть оффлайн-приложение.
  3. Пользователь — к сожалению, в отличии от авторизации по логину-паролю, пользователь должен эпизодически присутствовать в схеме авторизации.

 

Создание приложения в Системе

Сначала в личном кабинете Системы нажатием одной кнопки создается веб-приложение. В приложении нужно указать RedirectURI, смысл которого объясню далее:

 

 

Для приложения система генерирует ClientID и ClientSecret:

 

 

Получение Grant токена

Затем пользователю генерируется ссылка, ведущая на страницу Системы. Ссылка содержит ClientID в открытом виде. Пользователь должен пройти по ссылке. При этом пользователь должен быть авторизован под собой Системе при переходе по ссылке. Если он не авторизован, ему будет предложено авторизоваться.

Пользователю будет предложено разрешить приложению доступ к его данным — нажать зеленую кнопку:

 

 

На этом этапе мы видим, что ClientID — публичный идентификатор. Также видим, что нельзя воспользоваться в OAuth2 в браузере, где пользователь не авторизовался и автоматом кликнуть на кнопке «Согласен». Можно, конечно, заманить пользователя на свой сайт и попросить там ввести логин и пароль в систему, но вряд ли пользователь на это «купится». Так что тут всё довольно безопасно.

Когда пользователь подтверждает доступ, браузер переходит по адресу RedirectURI, передавая в параметре значение Grant токен. Скрипт, расположенный по этому адресу, сохраняет этот токен в Приложении.

Тут есть один подводный камень — теоретически, можно вызвать адрес RedirectURI и сбить сохраненный в Приложении Grant токен. Проблему можно решить тем, чтобы ограничить доступ к RedirectURI только администраторам.

Grant токен довольно долгоиграющий и может работать месяцами и годами, пока не будет отозван доступ. Пользователь может в личном кабинете зайти, посмотреть и отозвать выданные доступы.

 

Где хранить Grant токен

Рассмотрим ситуацию, когда у вас несколько пользователей гоняют данные туда-обратно в одну и ту же Систему. Тогда имеет смысл хранить Grant токен в константе. В первый раз пользователь, имеющий доступ в систему, авторизуется под собой в Систему и получит этот токен, а дальше возможностями интеграции с системой будут пользоваться все пользователи Приложения в рамках, ограниченных Приложением.

Но можно, конечно, хранить Grant токен и для каждого пользователя отдельно. Только не в сессиях, потому что срок жизни Grant токена намного дольше жизни сессии на сайте. Поэтому лучше хранить этот токен в настройках пользователя Приложения.

 

Особенности работы в локальном приложении

Однако как быть, если приложение — локальное (например 1С) и у нас нет веб-страницы для RedirectURI?

Тогда нужно встроить браузер в приложение и указать в качестве RedirectURI любую несуществующую страницу или любую страницу внутри корпоративного сайта. Тогда пользователь авторизуется во встроенном браузере, ведь он доверяет локальному приложению и когда перейдет по ссылке, браузер попытается перейти по ссылке, которая содержит Grant-токен. Можно перехватить этот адрес из встроенного браузера и получить из него токен.

 

Получение Refresh и Access токенов

Если известен Grant токен, можно выполнить запрос, содержащий ClientSecret и Grant токен. Система выдаст Refresh или Refresh и Access токены одновременно.

Refresh токен долгоживущий — в зависимости от настроек и параметро запроса может жить несколько суток или недель.

Access токен живет более короткий срок, обычно несколько часов.

OAuth2 также поддерживает получение Access токена из Refresh.

На практике обычно используется такой алгоритм:

  1. Если есть Access токен, то очередная операция осуществляется с его помощью. Нужно понимать, что доступ по этому токену может прерваться в любой момент, поэтому в случае отказа при обработке данных в цикле, проверять, а не по причине ли истечения срока Access токена произошел отказ.
  2. Если Access токена нет или он прекратил свое действие, то генерируется новый Access токен из Refresh токена.
  3. Если Refresh токена нет, то он генерируется из Grant токена.
  4. Если Grant токена нет, то обратока данных обычно прерывается с ошибкой, т.к. необходимо вмешательство пользователя, который должен заново авторизовать Приложение в Систему. А пользователь может быть не доступен в этот момент.

 

Выводы

Многоступенчатая система токенов призвана для устранения уязвимостей. Например, если перехватить Access токен, то воспользоваться доступом можно всего несколько часов. Refresh токен перехватить уже сложнее.

Жаль, что такое элегантное решение как пароли приложений, которые точно так же легко отозвать, игнорируется некоторыми системами и в задачах автоматизированного обмена приходится иногда вмешиваться в ход давно настроенных обработок. Это оборотная сторона безопасности.

 

Схема OAuth2

См. также

AUTO VPN (portable)

Информационная безопасность Платные (руб)

Автоматизация подключения пользователей к удаленному рабочему месту или сети посредством создания автоматического VPN (L2TP или L2TP/IPSEC и т.д.) подключения без ввода настроек пользователем (с возможностью скрытия этих настроек от пользователя). Программа автоматически выполняет подключение к VPN серверу и после успешного коннекта , если необходимо, подключение к серверу удаленных рабочих столов (RDP).

1200 руб.

24.03.2020    14395    22    32    

33

Настройка аутентификации в 1С с использованием стандарта RFC 7519 (JWT)

Информационная безопасность Платформа 1С v8.3 Бесплатно (free)

Рассмотрим в статье более подробную и последовательную настройку аутентификации в 1С с использованием распространенной технологии JWT, которая пришла в программу в платформе версии 8.3.21.1302.

27.02.2024    2587    PROSTO-1C    9    

29

Device flow аутентификация, или туда и обратно

Информационная безопасность Платформа 1С v8.3 Абонемент ($m)

Интеграционные решения стали неотъемлемой частью нашей жизни. Правилом хорошего тона в современных приложениях является не давать интегратору доступ к чувствительным данным. Device flow позволяет аутентифицировать пользователя, не показывая приложению чувствительные данные (например: логин и пароль)<br> Рассмотрим Device flow аутентификацию, в приложении, на примере OpenID провайдера Yandex.

1 стартмани

27.10.2023    1615    platonov.e    1    

23

Анализатор безопасности базы сервера 1С

Информационная безопасность Платформа 1С v8.3 Конфигурации 1cv8 Россия Абонемент ($m)

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

5 стартмани

24.04.2023    5437    14    soulner    7    

29

Двухфакторная аутентификация в 1С через Telegram и Email

Информационная безопасность Платформа 1С v8.3 1С:ERP Управление предприятием 2 Абонемент ($m)

1С, начиная с версии платформы 8.3.21, добавили в систему возможность двойной аутентификации. Как это работает: в пользователе информационной базы появилось свойство «Аутентификация токеном доступа» (АутентификацияТокеномДоступа во встроенном языке), если установить этот признак и осуществить ряд манипуляций на встроенном языке, то появляется возможность при аутентификации отправлять HTTP запросы, которые и реализуют этот самый второй фактор. Данное расширение позволяет организовать двухфакторную аутентификацию с помощью электронной почты или мессенджера Telegram.

2 стартмани

08.12.2022    5962    32    Silenser    12    

23

История одного взлома или проверьте вашу систему на безопасность

Информационная безопасность Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

От клиента клиенту, от одной системы к другой, мы вновь и вновь встречаем одни и те же проблемы и дыры в безопасности. На конференции Infostart Event 2021 Post-Apocalypse Виталий Онянов рассказал о базовых принципах безопасности информационных систем и представил чек-лист, с помощью которого вы сможете проверить свою систему на уязвимость.

26.10.2022    9242    Tavalik    46    

113
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. bprogs 188 25.02.23 10:51 Сейчас в теме
мне кажется вы упустили момент с примерами, так то я зашел посмотреть на 1с код :))))
maksa2005; ardn; bulpi; +3 Ответить
3. fixin 4252 25.02.23 17:40 Сейчас в теме
5. bprogs 188 25.02.23 18:36 Сейчас в теме
(3)
Спасибо, познавательно, как найду время обязательно протестирую
2. malikov_pro 1292 25.02.23 14:01 Сейчас в теме
(1) Автор изложил материал как он понял.
Для новичков проблематично понимать.

"К сожалению, некоторые системы полностью отказались от доступа по паролям "
Нужно ответить на вопросы,
почему отказались от Логин/Пароль?
кому и на основе чего системы доверяют доступ?

Формат сообщений JWT https://infostart.ru/1c/articles/611505/, RS256 в 1С начал с 8.3.21 работать заодно с поддержкой JWT.

Аутентификация самой 1С поддерживает 2 алгоритма аутентификации по OAuth2, желательно разобраться в чем отличия и зачем.

Код как пример https://infostart.ru/public/1279449/ (внутри ссылка на GitHub)

Настройка сервиса Oauth в локальном контуре https://infostart.ru/1c/articles/1538390/
brublik; Solne4naya; mcgoblin; uno-c; bprogs; +5 Ответить
7. uno-c 234 26.02.23 01:23 Сейчас в теме
(2)
RS256 в 1С начал с 8.3.21 работать заодно с поддержкой JWT

Эх... RS256 работает в 8.3.21 только в контексте JWT. А, например, обычную подпись RSA SHA-256 для yandexmaps по-прежнему не вычислить. Вернее я-то вычислил уже давно арифметикой, но тут преждевременно обрадовался, что с 8.3.21 все упростилось до пары строк.
4. fixin 4252 25.02.23 17:41 Сейчас в теме
(2) Ваша проблема в том, что не умеете излагать доходчиво и чрезмерно усложняете.
6. uno-c 234 25.02.23 20:06 Сейчас в теме
(4) Второй пост не для новичков, в нем все понятно, если Вы в теме. Порадовал RS256 в 8.3.21, пошел проверять )
Оставьте свое сообщение