Почему при вызове HTTP-сервиса 1С браузер требует логин и пароль и как это отключить?

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

При работе с внешними интеграциями через HTTP-сервисы 1С программисты часто сталкиваются с ситуацией, когда при обращении к опубликованному ресурсу браузер или стороннее приложение внезапно начинает запрашивать авторизацию (окно Basic Authentication). Это происходит даже в тех случаях, когда основная информационная база открывается в веб-клиенте без подобных запросов. Разберем детально, почему так происходит и как настроить бесшовный доступ к вашим сервисам на веб-сервере Apache.

Разбор механизма авторизации HTTP-сервисов

Для начала проанализируем ситуацию: почему при вызове корня публикации http://localhost/BAS пароль не требуется, а при обращении к http://localhost/BAS/hs/My/Test всплывает окно ввода учетных данных? Причина кроется в архитектуре платформы 1С. Когда вы открываете базу через веб-клиент, платформа сама отрисовывает форму логина 1С в теле страницы. Однако HTTP-сервисы — это программный интерфейс. Они не имеют графической оболочки 1С, поэтому платформа использует стандартные средства протокола HTTP.

Если в настройках публикации не указаны данные для автоматического входа, 1С возвращает веб-серверу код ответа 401 Unauthorized. Получив этот код, Apache транслирует его браузеру, который обязан показать системное окно ввода логина и пароля. Чтобы этого избежать, нам нужно настроить «анонимный» вход, при котором веб-сервер будет передавать учетные данные платформе 1С автоматически.

Способ 1: Пересоздание файла публикации default.vrd

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

  1. Перейдем в каталог на сервере, где физически расположена публикация базы (например, D:/xampp/htdocs/BAS/).
  2. Найдем файл default.vrd и сделаем его резервную копию.
  3. Удалим оригинал файла default.vrd.
  4. Запустим Конфигуратор 1С от имени администратора.
  5. Выберем пункт меню Администрирование — Публикация на веб-сервере.
  6. Заново нажмем кнопку Опубликовать.

Этот метод часто исправляет ошибки в структуре XML-файла и сбрасывает закэшированные настройки модуля _1cws_module в Apache. Именно это действие помогло автору рассматриваемой темы устранить проблему.

Способ 2: Настройка автоматической авторизации в default.vrd

Если пересоздание файла не помогло или вам нужно явно задать пользователя, под которым будут работать все внешние запросы к сервису, необходимо отредактировать файл default.vrd вручную. Рассмотрим структуру этого файла. Нас интересует атрибут ib в корневом теге point. Мы можем добавить параметры Usr (имя пользователя) и Pwd (пароль) прямо в строку соединения с базой данных.

Проанализируем пример настройки:


<?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="/BAS"
        ib="File=&quot;D:\temp\BAS\&quot;;Usr=&quot;WebUser&quot;;Pwd=&quot;123&quot;;">
    <httpServices>
        <service name="My" rootUrl="My" enable="true" reuseSessions="autouse"/>
    </httpServices>
</point>

Обратите внимание на использование сущности &quot; для экранирования кавычек внутри XML. В данном примере мы указали, что любое обращение к публикации /BAS будет выполняться от имени пользователя WebUser.

Важный совет по безопасности: для таких целей рекомендуется создать в 1С отдельного пользователя с минимальными правами. У этого пользователя должна быть назначена роль, дающая право только на использование конкретного HTTP-сервиса и право «Удаленный доступ (HTTP)». Не используйте учетные данные администратора в открытом виде в конфигурационных файлах.

Способ 3: Проверка конфигурации веб-сервера Apache

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


Alias "/BAS" "D:/xampp/htdocs/BAS/"
<Directory "D:/xampp/htdocs/BAS/">
    AllowOverride All
    Options None
    Require all granted
    SetHandler 1c-application
    ManagedApplicationDescriptor "D:/xampp/htdocs/BAS/default.vrd"
</Directory>

Выясним причину возможных сбоев в этом блоке:

  1. Директива Require: если вместо Require all granted написано Require valid-user, то Apache будет требовать авторизацию по своим внутренним спискам пользователей (из файла .htpasswd).
  2. Модули авторизации: убедитесь, что в начале httpd.conf загружены необходимые модули. Для работы 1С важен LoadModule _1cws_module с правильным путем к wsap24.dll (для Apache 2.4).
  3. Права на уровне ОС: пользователь, от имени которого запущена служба Apache (обычно SYSTEM или daemon), должен иметь полные права на чтение и запись в каталоге D:/temp/BAS/, если база файловая. Если прав недостаточно, система может ошибочно инициировать диалог авторизации вместо выдачи ошибки доступа.

Особенности использования параметров в URL

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

http://Логин:Пароль@localhost/BAS/hs/My/Test?p1=1

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

Резюме и рекомендации

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

Применяя эти шаги, мы обеспечим стабильную работу HTTP-интерфейсов без лишних преград для пользователей и внешних систем.

← На главную