«Вопрос/Ответ»: особенности публикации HTTP-сервисов расширений на автономном сервере

28.04.2023      53045

В телеграм-канале INFOSTART Enterprise есть еженедельная рубрика «Вопрос/Ответ». Мы предлагаем подписчикам задавать любые вопросы по работе с конфигурациями 1С и стараемся давать полезные ответы. 

На этот раз поговорим об автономном сервере и http-авторизации: разбирается в теме и отвечает на вопрос ведущий 1C-разработчик ИТ-лаборатории Инфостарт Александр Кунташов.

Вопрос

Есть ли возможность в 1С автономном сервере использовать HTTPзапросы расширений конфигурации и прописывать пользователя, под которым данные HTTPзапросы будут выполняться? На Apache реализовать через расширение HTTPзапрос не проблема, но раз у нас импортозамещение, хотелось бы использовать функции 1С автономного сервера вместо Apache.


Ответ

Если я правильно понял по контексту, тут вопрос не про возможность использовать объект HTTPЗапрос в базе, работающей под управлением автономного сервера, а про возможность публикации для этой базы HTTP-cервиса, реализованного в установленном в этой ИБ расширении.

Если вопрос про первое — то автономный сервер не имеет ограничений с точки зрения объектной модели, предоставляемой платформой 1С:Предприятие 8, и код, использующий объект HTTPЗапрос, будет прекрасно исполняться и под управлением автономного сервера.

Но мне кажется, вопрос был именно про http-сервисы, точнее тут даже целых два технических вопроса:

  • В1. Можно ли для информационной базы (ИБ), работающей под управлением автономного сервера, опубликовать http-сервис, реализованный в расширении, установленном в эту ИБ?
  • В2. Можно ли вызвать методы http-сервиса, опубликованного для ИБ, работающей под управлением автономного сервера, без необходимости на стороне клиента указывать логин и пароль (без basic-авторизации)?

Давайте попробуем разобраться и ответить на них.


В1: Можно ли при помощи автономного сервера опубликовать http-сервис из расширения?

TL;DR Да, можно.

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

 

 

Публикация http-сервиса на автономном сервере осуществляется при помощи конфигурационного yaml-файла. Его можно создать вручную, опираясь на примеры и документацию, либо сгенерировать при помощи утилиты ibcmd на основании данных ИБ уже опубликованной "классическим" способом (default.vrd).


Ручная настройка конфигурации для публикации http-сервиса

Допустим, у нас есть информационная база с расширением МойСервис, в котором реализован одноименный http-сервис c корневым URL myservice и единственным методом ping, возвращающим текстовую строку pong

Для публикации этого сервиса для ИБ под управлением автономного сервера нужно создать конфигурационный файл, назовем его publication.yaml, следующего содержания:

# publication.yaml
http:
  - base: /
    http-services:
      service:
        - name: МойСервис
          root: myservice
          publish: true

Как мы видим, имена свойств этого файла соответствуют атрибутам описания веб-сервиса в vrd-файле. Подробнее о них можно прочитать в документации.

Допустим, наша ИБ файловая и размещена в каталоге C:\Bases1C\InfoBase, в этом случае запуск автономного сервера для этой ИБ с публикацией нашего http-сервиса будет выглядеть так:

ibsrv --db-path="C:\Bases1C\InfoBase" --config="C:\Bases1C\publication.yml"

После запуска автономного сервера этой командой, наш метод ping мы сможем «дернуть», перейдя в браузере по ссылке:

http://localhost:8314/hs/myservice/ping

 

 


Конвертация настроек публикации http-сервиса из файла default.vrd

Второй способ, который мы выше упоминали — сгенерировать конфигурационный файл на основе уже существующей публикации в виде файла default.vrd.

Делается это командой ibcmd server config import:

ibcmd server config import --cluster-data="C:\srvinfo" --name=mybase --publication="C:\www\mybase\default.vrd" --out="C:\Bases1C\puclication.yaml"

В аргументах команды, как видно, нужно указать каталог с данными кластера сервера 1С, где опубликована база (аргумент --cluster-data), имя этой базы в кластере (аргумент --name) и путь к default.vrd (--publication). В аргументе --out указывается путь к файлу, в который будет сохранена конфигурация для автономного сервера.

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

Этот способ работает только для информационных баз, зарегистрированных в кластере серверов 1С:Предприятия, файловые базы командой ibcmd server config import не поддерживаются.

Подробнее разные примеры создания конфигурационного файла описаны в официальной документации.


В2. Можно ли вызвать методы http-сервиса, опубликованного на автономном сервере, без Basic-авторизации?

TL;DR Да, если использовать промежуточный реверс-прокси. Нет, если ограничиться только штатными возможностями автономного сервера. По крайней мере, я такой возможности не нашел — напишите в комментариях, если я вдруг не прав и что-то упустил.


Почему штатно не работает, и как можно попытаться обойти

В default.vrd есть возможность указать имя пользователя и пароль, под которыми расширение для веб-сервера подключается к ИБ, в строке соединения с базой данных. Но при импорте этих параметров при помощи ibcmd эта строка соединения игнорируется и не переносится, и об этом явно написано в документации:

Следует помнить, что механизм импорта файла публикации игнорирует командную строку доступа к информационной базе, которая указана в атрибуте ib элемента point файла default.vrd. Пользователь, выполняющий импорт, должен осмысленно указывать параметры импортируемой базы и файла публикации.

Да и в принципе, в описании конфигурационного файла автономного сервера свойств для указания имени пользователя и пароля нет (см. справку).

Поэтому для использования http-сервисов (равно как и web-сервисов), опубликованных средствами автономного сервера, нужно либо в коде клиентов этих сервисов указывать явно логин и пароль, либо включить в вашу инфраструктуру реверс-прокси, при помощи которого добавить в заголовки запроса заголовок с параметрами авторизации.

Если клиентом вашего сервиса является какое-то внешнее приложение, реализованное не на 1С, проверьте, возможно оно поддерживает формат URL с явным указанием логина и пароля в виде http://login:password@host:port/endpoint.

Например, к сервису из моего примера выше от имени пользователя httpservice с паролем 12345 можно обратиться таким образом:

http://httpservice:12345@localhost:8314/hs/myservice/ping

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


Пробросить авторизацию при помощи реверс-прокси (nginx/Angie)

Этот способ подразумевает, что запросы от клиента вашего http-сервиса будут сначала попадать на специальный сервер (реверс-прокси), который уже будет перенаправлять запрос на http-сервис.

Одним из популярных реверс-прокси является сервер nginx или, в контексте импортозамещения, можно использовать, например, его отечественный форк Angie.

Для демонстрации возможности я создал следующий конфигурационный файл для Angie (он же подойдет и для nginx):

# angie-default.conf
server {
    listen       80;
    server_name  _;

    location / {            
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass http://host.docker.internal:8314;
        proxy_set_header Authorization "Basic aHR0cHNlcnZpY2U6MTIzNDU=";
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}

Здесь нужно обратить внимание на две строки, которые вам придется изменить, чтобы настроить данный файл под себя:

proxy_pass http://host.docker.internal:8314;

Команда proxy_pass говорит, что входящие запросы нужно перенаправить на хост/порт, указанные в качестве аргумента.

В моем случае я запустил автономный сервер на своей локальной машине на порту по умолчанию (8314), а Angie — в docker-контейнере на этой же машине. Имя host.docker.internal — это предопределенное имя хоста, по которому из докер-контейнера можно получить доступ к хостовой машине. Вам нужно будет заменить это на имя или IP-адрес вашего хоста, на котором запущен автономный сервер 1С:Предприятия.

Вторая строка, на которую нужно обратить внимание — добавление в запрос к нашему http-сервису заголовка basic-авторизации. Значение после слова Basic — это строка вида «логин:пароль», закодированная в base64:

proxy_set_header Authorization "Basic aHR0cHNlcnZpY2U6MTIzNDU=";

Средствами 1С закодировать строку можно следующим образом (в данном фрагменте кода логин и пароль из моего примера выше):

СтрокаАвторизации = "httpservice:12345";
ДД = ПолучитьДвоичныеДанныеИзСтроки(СтрокаАвторизации);
ЗакодированнаяСтрока = Base64Строка(ДД);
Сообщить(ЗакодированнаяСтрока);

// aHR0cHNlcnZpY2U6MTIzNDU=

Используя данный конфигурационный файл, я запустил докер-контейнер с Angie следующей командой:

docker run --name myangie -p 8080:80 -v "C:\Bases1C\angie-default.conf:/etc/angie/http.d/default.conf" -d docker.angie.software/angie

После этого мой тестовый http-сервис начал отвечать по адресу http://localhost:8080/hs/myservice/ping, не требуя авторизацию.


Заключение

С точки зрения публикации http-сервисов из расширений, установленных в информационной базе, автономный сервер не имеет никаких ограничений.

Так же, как и в случае с использованием веб-сервера (Apache/IIS), http-сервисы расширения, которые вы хотите опубликовать, нужно явным образом перечислить в конфигурационном файле. Только делается это не в файле default.vrd, а непосредственно в yaml-файле конфигурации автономного сервера.

Но указание параметров авторизации конфигурационный файл автономного сервера не поддерживает, поэтому в http-запросах к опубликованному при помощи автономного сервера http-сервису нужно явно указывать параметры авторизации.

Когда у вас нет никакой возможности повлиять на потребителя/клиента вашего http-сервиса, чтобы он явно указывал логин/пароль в запросах к вашему сервису, можно прибегнуть к «инфраструктурному» способу — использовать промежуточный реверс-прокси.

В качестве реверс-прокси можно использовать сервер nginx или его форк Angie, разработанного в России и сертифицированного на совместимость с РЕД ОС и Astra Linux SE.

Использование реверс-прокси вдвойне оправдано, потому что он также необходим для организации доступа к автономному серверу по защищенному протоколу HTTPS, т.к. сам автономный сервер работает только по HTTP.

 


Автор:
Ведущий 1С разработчик


Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. artbear 1528 03.05.23 09:37 Сейчас в теме
Обалденная статья-конфетка - подробная, детальная, техническая, рассмотрена прорва вариантов и возможностей!

Рекомендую всем!
2. kuntashov 449 03.05.23 11:15 Сейчас в теме
(1) Бот? )
HameleonA; yukon; maksa2005; +3 Ответить
3. potoyalo 06.06.23 19:52 Сейчас в теме
Интересно, в конфигурационном файле в секции http-services есть параметр publish-extensions-by-default, но что-то не работает...
Документация
Оставьте свое сообщение

См. также

Купите участие в конференции «Анализ и Управление в ИТ-проектах 2024» до повышения цен

Новость Aнализ&Управление Мероприятия

С 1 мая цена на участие в конференции «Анализ и Управление в ИТ-проектах 2024» станет выше. Если вы еще сомневаетесь, стоит ли вам участвовать – подготовили несколько аргументов в пользу того, почему билет стоит купить уже сейчас.

вчера в 11:30    140    user997184    0       

1

Разработка прикладных решений с помощью Библиотеки стандартных подсистем: курс по 1С-программированию

Новость Обучение Программист

15 мая стартует онлайн-курс «1С: Библиотека стандартных подсистем для начинающих». На курсе мы будем изучать инструментарий разработчика и создавать прикладные решения на основе Библиотеки стандартных подсистем (БСП).

24.04.2024    943    AnastasiaKl    0       

16

Знакомимся с модератором секции «Открытый микрофон» и продолжаем прием заявок

Новость Aнализ&Управление Мероприятия

Секция «Открытый микрофон» обрела своего модератора – им стала постоянный докладчик конференций Инфостарт, Елена Дуюн. Знакомимся с Еленой поближе и напоминаем, как подать заявку на доклад для «Открытого микрофона», если вы еще этого не сделали.

23.04.2024    361    user997184    0       

15

Что будем осваивать в мае: онлайн-курс «1C:Предприятие для программистов: Запросы и отчеты»

Новость Обучение Программист

14 мая на Инфостарт начнется обширный онлайн-курс по запросам и возможностям системы компоновки данных в 1С:Предприятии.

23.04.2024    477    user997184    0       

16

Вышла 1С:Предприятие 8.3.25: в новом релизе платформы 55 доработок и 9 оптимизаций

Новость Платформа 1С v8.3 Зазеркалье

В релизе 8.3.25 платформа 1С научилась генерировать речь из текста, обновила средства разработки и администрирования, а также по многочисленным просьбам профессионального сообщества – расширила свой встроенный язык долгожданным методом ВызватьПаузу.

23.04.2024    5585    ЕленаЧерепнева    2       

3

3 главных причины участвовать в конференции «Анализ и Управление в ИТ-проектах» по VIP-пакету

Новость Aнализ&Управление Мероприятия

Сегодня поговорим о VIP-тарифе, который предусматривает еще больше преимуществ, и расскажем, что входит в пакет.

22.04.2024    697    user997184    0       

17

Конференция «Анализ и Управление в ИТ-проектах»: что нас ждет на вечеринке

Новость Aнализ&Управление Мероприятия

Конференция для аналитиков и управленцев пройдет в Санкт-Петербурге и продлится три дня. Традиционное развлекательное мероприятие для всех участников конференции Инфостарт – афтепати в первый вечер мероприятия. Рассказываем, что будет на вечеринке.

22.04.2024    477    AnastasiaKl    0       

15

1С:Предприятие 8.3.26: обновление стандарта ЕСИА и поддержка присоединенной ЭП

Новость Платформа 1С v8.3 Зазеркалье

Фирма «1С» анонсировала дополнительные возможности для работы с электронной подписью в технологической платформе 8.3.26. И сообщила о поддержке нового стандарта 3.34 для Единой системы идентификации и аутентификации (ЕСИА).

22.04.2024    535    ЕленаЧерепнева    0       

3

Готова программа конференции «Анализ и управление в ИТ-проектах»

Новость Aнализ&Управление Мероприятия

Сегодня подводим итоги 2 тура голосования и публикуем список докладов и других активностей, вошедших в финальную программу конференции «Анализ и управление в ИТ-проектах».

19.04.2024    969    eselyanina    0       

16

Выпуск новой редакции 1С:PLM 5 и начало продаж модуля PLM для 1С:ERP

Новость 1С:ERP Управление предприятием 2

Фирма «1С» сообщила об обновлении линейки решений 1С:PLM для автоматизации управления жизненным циклом изделия и инженерными данными. А также предупредила о снятии с продаж устаревших версий и скором прекращении их поддержки.

19.04.2024    670    ЕленаЧерепнева    0       

2

Новинка на Инфостарт: онлайн-курс «Автоматизированное тестирование в 1С»

Новость Обучение Программист

6 мая запускаем новый курс от Инфостарт, где мы научимся пользоваться самым популярным и открытым фреймворком тестирования для платформы 1С:Предприятие 8 – Vanessa Automation.

19.04.2024    897    AnastasiaKl    5       

17

Продлеваем прием заявок на конкурс «Современные возможности 1С: нетиповые интеграции и доработки»

Новость Сообщество

Заявки с вашими нетиповыми интеграциями продолжают поступать, поэтому мы ненадолго продлеваем прием. Теперь «заявиться» на конкурс можно до 20 апреля включительно.

17.04.2024    615    user997184    1       

2

Как использовать SmartWay в 1С для планирования командировок

Новость Сервисы ИТС

Smartway – решение для планирования и организации командировок, разработанный на базе российского ПО. Просто задайте направления и даты, а Smartway сравнит цены на билеты или гостиницы в режиме реального времени, предложит выгодные варианты

17.04.2024    927    user997184    0       

17

Расширяем возможности типового 1С-ЭПД: автозаполнение электронной транспортной накладной для нескольких реализаций

Новость Маркетплейс ЭДО

Из документа «Транспортная накладная», входящего в состав расширения «Мастер ТТН», теперь можно отправлять ЭТрН через типовую подсистему 1С-ЭДО, расширяя ее возможности автозаполнением всех требуемых реквизитов.

16.04.2024    709    Olga_Amelchenkova    0       

4

Приглашаем на первый бесплатный вебинар Комплексного курса по управлению ИТ-проектами

Новость Обучение Руководитель проекта

17 апреля стартует Комплексный курс по управлению ИТ-проектами. Курс начнется с бесплатного welcome-вебинара, где мы поговорим о компетенциях современного руководителя и расскажем подробно о программе курса.

16.04.2024    860    AnastasiaKl    1       

14

Обновлены материалы для подготовки к сертификации по 1С:ERP

Новость 1С:ERP Управление предприятием 2

Фирма «1С» доработала материалы для подготовки к тестированиям 1С:Профессионал и 1С:Специалист-консультант по конфигурации 1С:ERP Управление предприятием 2. С 26 апреля тестирование будет проводиться по обновленному комплекту вопросов.

16.04.2024    603    ЕленаЧерепнева    0       

1

Фирма «1С» возглавила ежегодный рейтинг франшиз по версии РБК

Новость ИТ-Новость

РБК ежегодно составляет рейтинг наиболее популярных российских франшиз. На протяжении многих лет фирма «1С» лидирует среди прочих предложений на рынке франчайзинга.

15.04.2024    620    ЕленаЧерепнева    0       

2

Фирма «1С» дополнила перечень продуктов, которые подорожают с 1 июля 2024 года

Новость

Обновление прайс-листа 1С на типовые и отраслевые лицензии в этом году проводится в два этапа – с 1 апреля и 1 июля. В список конфигураций, которые подорожают летом, добавлено еще несколько позиций.

15.04.2024    1764    ЕленаЧерепнева    0       

1

Сегодня, в 12:00, стартует бесплатный вебинар Марии Темчиной по разбору ошибок в управлении ИТ-проектами

Новость Обучение Руководитель проекта

Успейте подключиться к онлайн-встрече, где на реальных кейсах мы разберем проблемные ИТ-проекты, узнаем, как избежать ошибок или как исправить совершенные.

15.04.2024    1186    AnastasiaKl    0       

2

Обновление «1С:Документооборот КОРП 3.014»: очень много приятных мелочей

Новость

В релиз «1С:Документооборот КОРП 3.014» вошли улучшенные интеграции с 1С-сервисами: они расширяют возможности конфигурации. Улучшена функциональность самого продукта – разработчики добавили новые инструменты для работы с документами и файлами.

12.04.2024    1853    ЕленаЧерепнева    0       

2

Бесплатный онлайн-вебинар «1С:Аналитика – BI-система на платформе 1С»

Новость

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

11.04.2024    1959    AnastasiaKl    1       

15

Отвечаем на вопрос: зачем публиковать свои решения в Базе знаний Инфостарт

Новость Сообщество

Если вы еще сомневаетесь, вливаться ли в наше сообщество, обязательно прочитайте эту статью.

11.04.2024    1100    Sofya_Sukur    6       

26

Фирма «1С» актуализировала состояние плана задач для 1С:Предприятие 8.3.27

Новость Зазеркалье

Опубликован перечень задач, которые планируется реализовать для технологической платформы версии 8.3.27. Большая часть задач отмечена как выполненные, часть перенесена на следующий релиз, задач со статусом «в работе» в плане не осталось.

10.04.2024    813    ЕленаЧерепнева    0       

2

Учет по проектам в 1С Бухгалтерии v 2.9: главные обновления

Новость Маркетплейс

Учет рабочего времени по проектам и распределение заработной платы по отработанным часам в новой версии расширения «Учет по проектам в 1С:Бухгалтерии 3.0». Рассказываем об обновлениях подробнее.

09.04.2024    1219    user997184    0       

2