«Вопрос/Ответ»: автономный сервер и http-авторизация

28.04.2023      50097

В телеграм-канале 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 1430 03.05.23 09:37 Сейчас в теме
Обалденная статья-конфетка - подробная, детальная, техническая, рассмотрена прорва вариантов и возможностей!

Рекомендую всем!
2. kuntashov 446 03.05.23 11:15 Сейчас в теме
Оставьте свое сообщение

См. также

«Анализ&Управление в ИТ-проектах»: записи докладов и мастер-классов уже готовы

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

С 25 по 27 мая в Санкт-Петербурге прошла премьерная конференция Инфостарта для аналитиков и управленцев. Мы обещали, что записи будут как можно скорее, и держим слово: доклады и мастер-классы уже можно смотреть в записи.

02.06.2023    4929    user997184    0       

3

Чего ждать от 1С 8.3.25: опубликован актуальный план развития платформы

Новость Платформа 1С v8.3 Зазеркалье Infostart Software Partners ИТ-новость

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

02.06.2023    4230    ЕленаЧерепнева    0       

2

Осталось меньше недели до начала курса «1С-Программист: быстрый старт»

Новость Обучение, бизнес-тренинг, курсы ИТ-новость Программист

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

31.05.2023    4260    dklimchuk    0       

16

1С:Бухгалтерия 3.0.136: новые возможности для работы с ЕНС и СФР

Новость 1С:Бухгалтерия 3.0 ИТ-новость Сервисы

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

31.05.2023    6525    ЕленаЧерепнева    0       

2

В Санкт-Петербурге состоится XVIII Конгресс для ИТ-директоров «Белые ночи»

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

Информационный партнер конференции «Анализ и управление в ИТ-проектах» приглашает ИТ-директоров на XVIII Конгресс «Белые ночи».

30.05.2023    5638    user997184    0       

2

Совсем скоро стартует курс «1С:Библиотека стандартных подсистем»!

Новость Обучение, бизнес-тренинг, курсы ИТ-новость Программист

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

30.05.2023    9049    dklimchuk    0       

17

1С:Франчайзинг признан самой популярной франшизой в России

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

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

30.05.2023    6102    ЕленаЧерепнева    0       

1

Конференция «Анализ & Управление в ИТ-проектах» завершилась. Рассказываем, как все прошло

Новость Инфостарт Aнализ&Управление ИТ-новость Мероприятия Бизнес-аналитик Руководитель проекта

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

29.05.2023    9144    AnastasiaKl    168       

25

Изменение цен на 1С-Отчетность: новые зоны и новые тарифы

Новость ИТ-новость Отчетность Сервисы

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

29.05.2023    6551    ЕленаЧерепнева    1       

3

Сегодня весь день на конференции «Анализ & Управление в ИТ-проектах» работает секция «Открытый микрофон»

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

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

27.05.2023    9632    AnastasiaKl    0       

1

27 мая – третий день конференции «Анализ & Управление в ИТ-проектах»: полет нормальный

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

Подводим итоги второго дня конференции «Анализ & Управление в ИТ-проектах» и рассказываем, что запланировано на сегодня.

27.05.2023    12162    AnastasiaKl    0       

2

Квест-бот Инфостарта уже ждет первых игроков. Подключайтесь!

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

Подключайтесь к боту, отвечайте на вопросы и выигрывайте призы! Игра пройдет 26 и 27 мая. А мы пока расскажем о механике прохождения игры.

26.05.2023    11461    AnastasiaKl    0       

1

Открыта запись на онлайн-курс по обмену данными в системе 1С:Предприятие по ранней цене!

Новость Обучение, бизнес-тренинг, курсы Интеграция Инфостарт ИТ-новость

19 июня стартует базовый курс по обмену данными в 1С:Предприятие. Успейте записаться на курс по ранней цене, скидка будет действовать до 4 июня

25.05.2023    10257    dklimchuk    2       

16

Фотоконкурс: проявите свою креативность и выиграйте бесплатную поездку на следующую конференцию

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

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

25.05.2023    16722    AnastasiaKl    0       

1

Первая практическая конференция «Анализ & Управление в ИТ-проектах»: объявляем открытие

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

Официальное открытие конференции «Анализ & Управление в ИТ-проектах» состоялось! Рассказываем о самом важном и интересном, что мы заготовили на первый день мероприятия.

25.05.2023    9269    AnastasiaKl    0       

2

Новый курс по «1С:Библиотеке стандартных подсистем» пройдет с 6 по 27 июня

Новость Обучение, бизнес-тренинг, курсы Инфостарт ИТ-новость

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

24.05.2023    20984    dklimchuk    6       

18

Акциз на газировку: особенности поддержки новых требований в УНФ и Рознице 3.0

Новость 1С:Розница 3.0 1С:Управление нашей фирмой 1.6 1С:Управление нашей фирмой 3.0 Infostart Software Partners ИТ-новость

С 1 июля начинает действовать новый акциз для сахаросодержащих напитков. Преимущественно речь идет о сладких газировках и энергетиках. Рассказываем, как данное требование поддерживается в решениях 1С:УНФ и 1С:Розница редакции 3.0.

24.05.2023    22580    ЕленаЧерепнева    2       

1

Новые форматы электронных документов: изменения уже вступили в силу

Новость ИТ-новость Сервисы ЭДО

Фирма «1С» напоминает всем пользователям сервиса 1С-ЭДО о необходимости обновления учетных систем: ФНС ввела новый формат служебных документов, используемых при выставлении и получении «первички», в том числе электронных счетов-фактур.

23.05.2023    21535    ЕленаЧерепнева    2       

1

Получите 25% кешбэка на товары и услуги Инфостарта при первичном подключении к сервису «1С-Отчетность»

Новость Инфостарт ИТ-новость Отчетность Сервисы Стартмани

Подключиться к «1С-Отчетность» с Инфостартом выгодно – для всех новых пользователей сервиса мы начисляем 25% бонуса в стартмани или в рублях, который можно потратить у нас на сайте.

23.05.2023    18758    user1763361    0       

3

Издательство МИФ дарит участникам конференции «Анализ & Управление в ИТ-проектах» промокод на скидку 10%

Новость Инфостарт Aнализ&Управление ИТ-новость Мероприятия Бизнес-аналитик Руководитель проекта

Издательство МИФ – официальный партнер конференции «Анализ & Управление в ИТ-проектах». Это значит, что на конференции можно будет потрогать, посмотреть и купить книги об управлении, тайм-менеджменте и бизнесе. Стенд издательства расположится рядом с зоной кофе\чая.

23.05.2023    12799    eselyanina    0       

1

Новые возможности для работы с расширениями в 1С 8.3.25: по просьбам сообщества

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

В платформе 8.3.25 разработчики смогут создавать и модифицировать в расширениях бизнес-процессы, задачи и управлять составом собственных и заимствованных критериев отбора.

22.05.2023    16919    ЕленаЧерепнева    1       

1

Новая «Мобильная касса 3.18» с документами оприходования и списания

Новость ИТ-новость Новый релиз

Начиная с релиза 3.18, пользователи прямо с мобильного телефона смогут формировать в приложении документы списания, оприходования и инвентаризации, а также использовать коды весовых товаров SKU, новые типы маркировки и другие возможности.

22.05.2023    13972    ЕленаЧерепнева    0       

1