При интеграции 1С с современными маркетплейсами или сервисами (такими как Allegro, Amazon или eBay) разработчики часто сталкиваются с проблемой: при попытке открыть страницу авторизации через стандартное ПолеHTMLДокумента сервер возвращает ошибку "You have been blocked". В этом материале мы разберем, почему это происходит, и проанализируем наиболее эффективные способы обхода этой защиты, включая использование современного метода Device Flow.
Проанализируем ситуацию. Когда мы открываем форму 1С с элементом ПолеHTMLДокумента, платформа использует встроенный движок браузера. В старых версиях 1С и при определенных настройках совместимости этот движок базируется на Internet Explorer. Современные системы защиты (например, Cloudflare или собственные разработки Allegro) мгновенно распознают такой браузер как устаревший или подозрительный.
Основные причины блокировки:
Самый простой способ избежать блокировки — отказаться от попыток встроить окно авторизации непосредственно в интерфейс 1С. Вместо этого мы можем использовать системный браузер пользователя (Chrome, Edge, Firefox), который гарантированно пройдет все проверки.
Рассмотрим алгоритм действий:
ЗапуститьПриложение(Адрес).Redirect URI с кодом авторизации.Проблема этого метода заключается в передаче кода обратно в 1С. Для этого в 1С часто поднимают временный HTTP-сервис, который ожидает входящий запрос на localhost, либо просят пользователя скопировать код из адресной строки вручную.
Разберем более продвинутый и удобный для десктопных приложений метод — Device Flow. Он предназначен специально для устройств, где ввод данных затруднен или использование встроенного браузера ограничено. Этот метод не требует открытия окна браузера внутри 1С.
Шаг 1. Запрос кода устройства
Нам необходимо отправить POST-запрос к серверу авторизации. Посмотрим на структуру запроса, которую мы должны сформировать в 1С:
// Пример формирования POST-запроса для получения кода устройства
Сервер = "allegro.pl.allegrosandbox.pl";
Ресурс = "/auth/oauth/device";
ЗаголовокЗапроса = Новый Соответствие;
// Передаем авторизационные данные приложения в формате Base64(client_id:client_secret)
СтрокаАвторизации = СтрокаИдентификатораПриложения + ":" + СекретПриложения;
ЗаголовокЗапроса.Вставить("Authorization", "Basic " + Base64Строка(Квота(СтрокаАвторизации)));
ЗаголовокЗапроса.Вставить("Content-Type", "application/x-www-form-urlencoded");
Запрос = Новый HTTPЗапрос(Ресурс, ЗаголовокЗапроса);
// Параметр -d (тело запроса) формируется как строка
ТелоЗапроса = "client_id=" + СтрокаИдентификатораПриложения;
Запрос.УстановитьТелоИзСтроки(ТелоЗапроса);
Соединение = Новый HTTPСоединение(Сервер, 443,,,,, Новый ЗащищенноеСоединениеOpenSSL());
Ответ = Соединение.ОтправитьДляОбработки(Запрос);
Шаг 2. Взаимодействие с пользователем
В ответ сервер пришлет JSON, содержащий user_code и verification_uri. Мы должны вывести эти данные пользователю. Пользователь открывает указанную ссылку в любом удобном браузере и вводит там текстовый код. В это время 1С переходит в режим ожидания (опроса сервера).
Шаг 3. Опрос сервера (Polling)
Проанализируем, как 1С должна узнать о завершении авторизации. Мы запускаем цикл или фоновое задание, которое раз в несколько секунд отправляет запрос на получение токена, используя device_code. Как только пользователь подтвердит доступ в браузере, сервер вернет нам долгожданный access_token и refresh_token.
Часто у разработчиков возникает вопрос: что означает флаг -d в примерах curl и как его перенести в 1С? Флаг -d (data) означает, что данные должны передаваться в теле (Body) HTTP-запроса. При этом тип контента должен быть application/x-www-form-urlencoded.
Важные моменты при формировании тела запроса:
Ключ=Значение, разделенных амперсандом &.КодироватьСтроку с параметром СпособКодированияСтроки.URLКадирование).Запрос.УстановитьТелоИзСтроки(СтрокаПараметров).Если специфика задачи требует именно встроенного окна, выясним, как обновить движок браузера в 1С. Начиная с версии платформы 8.3.14, 1С поддерживает использование движка Chromium. Для этого в свойствах конфигурации или конкретного элемента формы необходимо убедиться, что не установлены режимы совместимости с IE.
Однако даже Chromium может блокироваться, если User-Agent выдает использование средств автоматизации. Поэтому всегда рекомендуется устанавливать актуальный заголовок браузера вручную:
ЗаголовокЗапроса.Вставить("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36");
Помните, что проходить процедуру авторизации через браузер нужно только один раз. После получения refresh_token, вы можете обновлять доступ программно в фоновом режиме. В Allegro refresh_token может быть валиден до 365 дней.
Разберем логику хранения:
access_token./auth/oauth/token с параметром grant_type=refresh_token без привлечения пользователя.Таким образом, решив проблему блокировки на этапе авторизации, вы обеспечите стабильную и бесперебойную работу вашей интеграции 1С с внешними сервисами.