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    15364    25    32    

35

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

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

2400 руб.

29.08.2016    30053    9    1    

10

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

Все еще храните пароли в базе? Тогда мы идем к вам! Безопасное и надежное хранение секретов. JWT авторизация. Удобный интерфейс. Демо конфигурация. Бесплатно.

30.05.2024    6209    kamisov    17    

60

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

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

27.02.2024    7313    PROSTO-1C    10    

39

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

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

1 стартмани

27.10.2023    2409    platonov.e    1    

23

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

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

5 стартмани

24.04.2023    6252    20    soulner    8    

32

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

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

2 стартмани

08.12.2022    7278    50    Silenser    12    

24
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. bprogs 277 25.02.23 10:51 Сейчас в теме
мне кажется вы упустили момент с примерами, так то я зашел посмотреть на 1с код :))))
GV.; maksa2005; ardn; bulpi; +4 Ответить
3. fixin 4273 25.02.23 17:40 Сейчас в теме
5. bprogs 277 25.02.23 18:36 Сейчас в теме
(3)
Спасибо, познавательно, как найду время обязательно протестирую
2. malikov_pro 1324 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/
user603532_fan_club_chelsea; brublik; Solne4naya; mcgoblin; uno-c; bprogs; +6 Ответить
7. uno-c 264 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 4273 25.02.23 17:41 Сейчас в теме
(2) Ваша проблема в том, что не умеете излагать доходчиво и чрезмерно усложняете.
6. uno-c 264 25.02.23 20:06 Сейчас в теме
(4) Второй пост не для новичков, в нем все понятно, если Вы в теме. Порадовал RS256 в 8.3.21, пошел проверять )
Оставьте свое сообщение