При публикации веб-сервисов на платформе 1С:Предприятие 8.1 с использованием веб-сервера Apache 2.2 разработчики часто сталкиваются с проблемой: при попытке получить описание сервиса (WSDL-файл) или выполнить запрос, браузер или внешняя система запрашивают имя пользователя и пароль. Это происходит потому, что база данных 1С защищена списком пользователей, а веб-сервер по умолчанию требует аутентификации для доступа к ресурсам базы.
В этой статье мы подробно разберем, как отключить это окно авторизации для внешних потребителей, настроить автоматический вход под определенным пользователем 1С, а также проанализируем риски безопасности и альтернативные архитектурные решения.
Обратите внимание, что в платформе 1С 8.1 архитектура публикации отличается от версий 1С 8.2 и 8.3. Здесь не используется единый файл конфигурации default.vrd. Вместо него для каждого веб-сервиса генерируется собственный файл с расширением .1cws. Именно с ним мы и будем работать.
---
Самый простой и быстрый способ убрать окно авторизации — жестко прописать учетные данные специального пользователя 1С (под которым должен выполняться веб-сервис) непосредственно в файл публикации .1cws. В таком случае веб-сервер будет автоматически авторизовать все входящие запросы.
Рассмотрим по шагам, как это сделать:
WebUser и паролем 123456). Назначьте ему минимально необходимые роли для выполнения методов вашего веб-сервиса. Крайне не рекомендуется использовать для этого пользователей с полными правами..1cws (например, MyWebService.1cws)..1cws с помощью любого текстового редактора (например, Блокнота). По умолчанию его структура выглядит следующим образом:
<?xml version="1.0" encoding="UTF-8"?>
<service xmlns="http://www.w3.org/2001/XMLSchema"
namespace="http://www.yourdomain.ru/WS/Exchange"
name="MyWebService"
connectString="File="C:\1C_Bases\WorkBase";" />
Нам необходимо модифицировать атрибут connectString (строку подключения), добавив параметры usr и pwd. Проанализируем структуру параметров. Так как значения параметров внутри XML-атрибута должны быть экранированы, вместо обычных двойных кавычек используйте конструкцию ".
Для файлового варианта базы данных:
<?xml version="1.0" encoding="UTF-8"?>
<service xmlns="http://www.w3.org/2001/XMLSchema"
namespace="http://www.yourdomain.ru/WS/Exchange"
name="MyWebService"
connectString="File="C:\1C_Bases\WorkBase";usr="WebUser";pwd="123456";" />
Для клиент-серверного (SQL) варианта базы данных:
<?xml version="1.0" encoding="UTF-8"?>
<service xmlns="http://www.w3.org/2001/XMLSchema"
namespace="http://www.yourdomain.ru/WS/Exchange"
name="MyWebService"
connectString="Srvr="SQLServerName";Ref="WorkBaseSQL";usr="WebUser";pwd="123456";" />
Важное правило: Имя пользователя 1С и его пароль в строке подключения должны быть написаны исключительно латиницей. Использование кириллических символов может приводить к ошибкам кодировки при передаче запроса от Apache к платформе 1С, из-за чего авторизация будет отклонена.
---
Выясним, насколько безопасен данный подход и не увидят ли внешние пользователи ваши логин и пароль в открытом виде.
В штатном режиме работы веб-сервера Apache 2.2 внешние пользователи не могут увидеть содержимое файла .1cws. При обращении к этому файлу (например, по ссылке http://localhost/MyPub/MyWebService.1cws?wsdl) веб-сервер перехватывает запрос с помощью специального модуля расширения 1С (обработчика запросов). Модуль считывает параметры подключения, обращается к базе 1С, генерирует ответ (WSDL-схему) и отдает клиенту только ее. Исходный код файла .1cws наружу не передается.
Однако существуют серьезные риски:
.1cws как обычные статические текстовые файлы. В этом случае любой пользователь, обратившись по прямой ссылке, сможет скачать файл и прочитать ваши логин и пароль в открытом виде.Для минимизации этих рисков настройте права доступа к каталогу публикации на уровне операционной системы, разрешив чтение файлов только той учетной записи, от имени которой запущена служба веб-сервера Apache.
---
Если требования к безопасности информационной системы высоки и хранить пароли в файлах публикации 1С категорически запрещено, мы можем использовать архитектурный шаблон «Реверс-прокси».
Выясним суть этого метода. Сама публикация веб-сервиса 1С настраивается в обычном режиме — без указания логина и пароля в файле .1cws. При прямом обращении база будет требовать авторизацию. Однако перед веб-сервером 1С разворачивается прокси-сервер (например, Nginx или отдельный виртуальный хост Apache), который смотрит во внешнюю сеть.
Схема взаимодействия выглядит следующим образом:
Authorization: Basic ...), содержащий имя пользователя и пароль 1С, закодированные в Base64.Для настройки такой схемы на Nginx в конфигурационный файл добавляется директива proxy_set_header. Рассмотрим пример настройки, где строка dXNyOnB3ZA== представляет собой закодированную в Base64 пару логин:пароль:
location /MyPub/MyWebService.1cws {
proxy_pass http://internal-1s-server/MyPub/MyWebService.1cws;
proxy_set_header Authorization "Basic dXNyOnB3ZA==";
}
Этот метод полностью исключает утечку паролей при сбоях веб-сервера 1С, так как авторизационные данные хранятся в защищенном конфиге прокси-сервера, находящегося во внутреннем контуре сети.
---
Еще один профессиональный вариант — настроить сквозную авторизацию операционной системы. Автор темы на форуме упоминал системного пользователя IUSR_, который используется веб-сервером IIS от Microsoft для анонимного доступа. В веб-сервере Apache 2.2 под Windows этот механизм устроен иначе.
По умолчанию служба Apache работает под учетной записью SYSTEM. Вы можете перенастроить службу на запуск от имени доменного пользователя, а в самом веб-сервере подключить модуль авторизации Windows (например, mod_auth_sspi для Apache 2.2).
Разберем общую схему интеграции:
\\DOMAIN\UserName.При таком подходе веб-сервер будет автоматически пробрасывать учетные данные вызывающего пользователя Windows в платформу 1С, избавляя от необходимости ручного ввода логина и пароля.
---
Проанализируем ситуацию: если веб-сервис разрабатывается не для открытия в браузере обычными пользователями, а для интеграции с другой информационной системой (например, сайтом или другой конфигурацией 1С), отключать авторизацию на стороне сервера вообще не требуется. Это снижает общую безопасность вашей системы.
Правильнее передавать параметры авторизации непосредственно из вызывающего кода. Большинство современных платформ и языков программирования поддерживают стандартную HTTP-авторизацию (Basic Access Authentication).
Передать логин и пароль можно двумя путями:
http://WebUser:123456@localhost/MyPub/MyWebService.1cws?wsdlAuthorization со значением Basic <Base64_строка>, где строка формируется как ИмяПользователя:Пароль. Это стандартное поведение для любых SOAP-клиентов на любых языках программирования.Выбирайте наиболее подходящий для вашей инфраструктуры способ, соблюдая баланс между удобством настройки и требованиями информационной безопасности вашей организации.