При работе с внешними интеграциями через HTTP-сервисы 1С программисты часто сталкиваются с ситуацией, когда при обращении к опубликованному ресурсу браузер или стороннее приложение внезапно начинает запрашивать авторизацию (окно Basic Authentication). Это происходит даже в тех случаях, когда основная информационная база открывается в веб-клиенте без подобных запросов. Разберем детально, почему так происходит и как настроить бесшовный доступ к вашим сервисам на веб-сервере Apache.
Для начала проанализируем ситуацию: почему при вызове корня публикации http://localhost/BAS пароль не требуется, а при обращении к http://localhost/BAS/hs/My/Test всплывает окно ввода учетных данных? Причина кроется в архитектуре платформы 1С. Когда вы открываете базу через веб-клиент, платформа сама отрисовывает форму логина 1С в теле страницы. Однако HTTP-сервисы — это программный интерфейс. Они не имеют графической оболочки 1С, поэтому платформа использует стандартные средства протокола HTTP.
Если в настройках публикации не указаны данные для автоматического входа, 1С возвращает веб-серверу код ответа 401 Unauthorized. Получив этот код, Apache транслирует его браузеру, который обязан показать системное окно ввода логина и пароля. Чтобы этого избежать, нам нужно настроить «анонимный» вход, при котором веб-сервер будет передавать учетные данные платформе 1С автоматически.
Как показывает практика, часто проблема возникает из-за некорректного обновления файла default.vrd при использовании стандартного мастера публикации в Конфигураторе. Если раньше сервис работал без пароля, а после внесения изменений в код или обновления платформы начал его требовать, выполним следующие шаги:
D:/xampp/htdocs/BAS/).default.vrd и сделаем его резервную копию.default.vrd.Этот метод часто исправляет ошибки в структуре XML-файла и сбрасывает закэшированные настройки модуля _1cws_module в Apache. Именно это действие помогло автору рассматриваемой темы устранить проблему.
Если пересоздание файла не помогло или вам нужно явно задать пользователя, под которым будут работать все внешние запросы к сервису, необходимо отредактировать файл 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="D:\temp\BAS\";Usr="WebUser";Pwd="123";">
<httpServices>
<service name="My" rootUrl="My" enable="true" reuseSessions="autouse"/>
</httpServices>
</point>
Обратите внимание на использование сущности " для экранирования кавычек внутри XML. В данном примере мы указали, что любое обращение к публикации /BAS будет выполняться от имени пользователя WebUser.
Важный совет по безопасности: для таких целей рекомендуется создать в 1С отдельного пользователя с минимальными правами. У этого пользователя должна быть назначена роль, дающая право только на использование конкретного HTTP-сервиса и право «Удаленный доступ (HTTP)». Не используйте учетные данные администратора в открытом виде в конфигурационных файлах.
Иногда запрос пароля инициирует не сама 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>
Выясним причину возможных сбоев в этом блоке:
Require all granted написано Require valid-user, то Apache будет требовать авторизацию по своим внутренним спискам пользователей (из файла .htpasswd).httpd.conf загружены необходимые модули. Для работы 1С важен LoadModule _1cws_module с правильным путем к wsap24.dll (для Apache 2.4).SYSTEM или daemon), должен иметь полные права на чтение и запись в каталоге D:/temp/BAS/, если база файловая. Если прав недостаточно, система может ошибочно инициировать диалог авторизации вместо выдачи ошибки доступа.Если вы находитесь на этапе отладки и не хотите жестко прописывать пароль в файле default.vrd, можно проверить работоспособность сервиса, передав учетные данные прямо в URL запроса. Рассмотрим формат такой ссылки:
http://Логин:Пароль@localhost/BAS/hs/My/Test?p1=1
Этот метод позволяет быстро выяснить, принимает ли ваша база 1С авторизацию в принципе. Если при такой передаче данных браузер все равно настойчиво требует ввода пароля в окне — значит, проблема кроется в настройках прав доступа пользователя внутри самой 1С или в конфликте модулей Apache. Для проверки корректности передачи заголовков и параметров авторизации можно использовать обработку для тестирования HTTP-сервисов с поддержкой защищенной авторизации.
Подводя итог, можно сказать, что решение проблемы с внезапным запросом пароля чаще всего заключается в перепубликации сервиса или ручной корректировке default.vrd. Выясним основные моменты, которые стоит проверить в первую очередь:
default.vrd заново через Конфигуратор.Usr и Pwd в default.vrd, если требуется анонимный доступ.httpd.conf или default.vrd обязательно перезапускайте службу Apache (или XAMPP Control Panel), так как веб-сервер кэширует параметры дескриптора.Применяя эти шаги, мы обеспечим стабильную работу HTTP-интерфейсов без лишних преград для пользователей и внешних систем.