Как убрать запрос логина и пароля при обращении к HTTP-сервису 1С через файл default.vrd

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

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

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

Синтаксис строки подключения в файле default.vrd

Файл default.vrd представляет собой XML-документ, управляющий публикацией информационной базы на веб-сервере (Apache или IIS). Параметры подключения к серверу 1С задаются в корневом теге point в атрибуте ib.

По умолчанию строка подключения к клиент-серверной базе выглядит следующим образом:

ib="Srvr="localhost";Ref="test";"

Чтобы платформа не запрашивала логин и пароль при каждом HTTP-запросе, добавим в эту строку параметры Usr (имя пользователя) и Pwd (пароль).

Рассмотрим правильный формат записи:

ib="Srvr="localhost";Ref="test";Usr="Programmer";Pwd="123456";"

Проанализируем ключевые правила оформления строки подключения:

  1. Разделители параметров: Все параметры строки соединения разделяются точкой с запятой ;. Не допускается ставить двойную точку с запятой подряд (например, ;;Usr), так как это приведет к ошибке разбора строки.
  2. Экранирование кавычек в XML: Поскольку вся строка ib уже заключена в двойные кавычки атрибута XML, внутренние кавычки вокруг значений параметров должны экранироваться как " или опускаться.
  3. Имена без пробелов: Если имя пользователя и пароль состоят из латинских букв или цифр без пробелов и спецсимволов, внутренние кавычки можно опустить: ib="Srvr=localhost;Ref=test;Usr=Programmer;Pwd=123456;"
  4. Имена с пробелами и спецсимволами: Если в логине или пароле присутствуют пробелы, русские буквы или специальные знаки, обрамление в кавычки с XML-экранированием обязательно:
    
    ib="Srvr="srv-1c-app";Ref="trade_base";Usr="Сервисный Пользователь";Pwd="P@ssw0rd!";"
    

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

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

Рассмотрим структуру безопасного файла публикации:


<?xml version="1.0" encoding="UTF-8"?>
<point xmlns="http://v8.1c.ru/8.2/virtual-resource-system"
       xmlns:xs="http://www.w3.org/2001/XMLSchema"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       base="/my_api"
       ib="Srvr="localhost";Ref="test";Usr="WebServiceUser";Pwd="Secret123";">
    <standardOData enable="false"/>
    <httpServices publishByDefault="false">
        <service name="ОбменДанными" rootUrl="exchange" enable="true"/>
    </httpServices>
</point>

Разберем параметры безопасности:

  1. Отключение Web-клиента: В файле публикации должен отсутствовать тег <webClient enable="true"/>, чтобы нельзя было открыть пользовательский интерфейс 1С через браузер под служебной учетной записью.
  2. Отключение OData: Параметр <standardOData enable="false"/> блокирует стандартный REST-интерфейс ко всем таблицам информационной базы.
  3. Выборочная публикация сервисов: Атрибут publishByDefault="false" внутри тега httpServices запрещает автоматическую публикацию всех имеющихся в конфигурации сервисов. Доступ открывается только для явно объявленного тега service.

Ограничение прав служебного пользователя в конфигурации 1С

Для учетной записи, указанной в default.vrd, необходимо соблюдать принцип наименьших привилегий:

  1. Создадим в конфигураторе отдельную роль (например, СервисОбменаДанными), в которой отметим только право Использование для конкретного HTTP-сервиса.
  2. Не назначаем пользователю полные права и административные роли. Если логике сервиса требуются операции с объектами, к которым у пользователя нет прямого доступа, используем в коде вызов метода УстановитьПривилегированныйРежим(Истина).
  3. В карточке пользователя информационной базы снимем флаг Показывать в списке выбора и отключим авторизацию операционной системы.

Альтернативные способы передачи авторизации

Если требуется избежать открытого хранения пароля в конфигурационном файле default.vrd, рассмотрим другие подходы:

  1. Заголовок Basic Auth: Оставляем строку ib без параметров Usr и Pwd, а вызывающая сторона передает стандартный заголовок Authorization: Basic <base64> в каждом запросе. Платформа 1С автоматически прочитает заголовок и выполнит вход под переданным пользователем.
  2. Авторизация по Bearer-токену или API-ключу: В default.vrd прописывается технический пользователь с нулевыми правами доступа к данным, а в теле метода HTTP-сервиса 1С извлекается кастомный заголовок (например, X-API-Key). Код модуля проверяет валидность ключа и при ошибке возвращает HTTP-ответ со статусом 401 или 403.

Оптимизация производительности: повторное использование сеансов

При частых запросах к HTTP-сервису создание нового сеанса 1С на каждый вызов создает высокую нагрузку на сервер. Для оптимизации используем пул сеансов в default.vrd:


<point xmlns="http://v8.1c.ru/8.2/virtual-resource-system"
       base="/my_api"
       ib="Srvr="localhost";Ref="test";Usr="WebServiceUser";Pwd="Secret123";"
       reuseSessions="autouse"
       sessionMaxAge="60">
    ...
</point>

Параметр reuseSessions="autouse" позволяет платформе удерживать созданный сеанс в памяти и переиспользовать его для последующих запросов, что существенно снижает задержку ответа сервиса.

← На главную