При публикации HTTP-сервисов 1С на локальном или удаленном веб-сервере (например, Apache) разработчики часто сталкиваются с ситуацией, когда при попытке обратиться к сервису в браузере или через стороннюю программу появляется окно с требованием ввести логин и пароль. Проанализируем эту ситуацию и разберем по шагам, как правильно настроить публикацию, чтобы избавиться от лишних запросов авторизации, а также выясним причины возникновения сопутствующих ошибок, таких как ошибка 500.
Если вы развернули базу исключительно для локального тестирования и в ней не хранится никаких важных данных, самым простым решением будет полное удаление всех пользователей в режиме Конфигуратора. Если в информационной базе 1С нет ни одного пользователя, платформа пускает всех без запроса пароля. Однако помните, что этот метод категорически не подходит для рабочих (продуктовых) баз.
Рассмотрим более правильный подход, который заключается в «жестком» прописывании логина и пароля пользователя 1С в файле публикации default.vrd. Этот файл создается автоматически при публикации базы на веб-сервере.
Чтобы Apache не спрашивал пароль, нам нужно передать ему данные служебного пользователя напрямую в строке подключения базы данных. Для этого найдем атрибут ib в файле и дополним его параметрами Usr (пользователь) и Pwd (пароль).
Посмотрим на пример, как это часто пытаются написать разработчики (и допускают ошибку):
ib="Srvr="Ala01-app1c02";Ref="surp_test";Usr="тест2";Pwd="030514";"
Если вы отредактировали файл публикации так, как показано в примере выше, и при обращении к сервису веб-сервер возвращает статус «500 Internal Server Error», выясним причину. Дело в том, что default.vrd — это файл в формате XML. Использование двойных кавычек внутри уже открытых двойных кавычек грубо ломает структуру XML-документа. Веб-сервер просто не может прочитать конфигурацию и мгновенно «падает» с ошибкой 500.
Проанализируем правильные варианты синтаксиса. Если в именах сервера, базы и в пароле нет пробелов, внутренние кавычки можно просто убрать:
ib="Srvr=Ala01-app1c02;Ref=surp_test;Usr=тест2;Pwd=030514;"
Если же пробелы присутствуют (или вы хотите использовать строгий синтаксис), необходимо экранировать внутренние кавычки с помощью HTML-сущности ". Настроим строку правильно:
ib="Srvr="Ala01-app1c02";Ref="surp_test";Usr="тест2";Pwd="030514";"
После внесения изменений обязательно перезапустите службу Apache. Также рекомендуется использовать логины на латинице (английском языке), чтобы избежать проблем с кодировкой.
Обратим внимание на важный нюанс безопасности. Прописывая логин и пароль в default.vrd, вы делаете ваш HTTP-сервис полностью открытым для анонимного доступа. Любой человек или бот в интернете, узнавший URL вашего сервиса, сможет вызывать его методы.
Для реальных проектов правильной практикой является использование Basic Authentication. В этом случае логин и пароль не хранятся в default.vrd, а передаются самой вызывающей системой (клиентом) в защищенных заголовках каждого HTTP-запроса.
Если авторизация проходит, но сервис все равно работает некорректно, нам потребуется отладка кода модуля HTTP-сервиса. Настроим отладку на веб-сервере по шагам:
default.vrd.
<debug enable="true" url="tcp://localhost"/>
Рассмотрим еще несколько причин, из-за которых HTTP-сервисы могут не работать должным образом:
default.vrd внутри тега <httpServices> нужно вручную добавить параметр publishExtensionsByDefault="true".SYSTEM в Windows или www-data в Linux), не хватает прав. Убедитесь, что у этого пользователя есть права на чтение папки bin платформы 1С и права на папку, где лежит default.vrd.error.log веб-сервера Apache. Кроме того, при вызове сервиса (например, через Postman) читайте тело ответа сервера — платформа 1С очень часто возвращает подробный текст ошибки с указанием строки кода прямо в теле ответа.Используя эти методы настройки и диагностики, вы сможете быстро разобраться с запросами авторизации, корректно сконфигурировать веб-сервер и настроить стабильную работу ваших HTTP-сервисов в 1С.