В практике администрирования и разработки на платформе 1С:Предприятие 8 часто возникает классическая проблема: предыдущий специалист настроил интеграцию баз данных через веб-сервис, а затем данные для авторизации (логин, пароль, точный адрес публикации) были утрачены. В результате обмен останавливается, а новые администраторы не могут оперативно восстановить связь.
В этой статье мы подробно разберем, как локализовать проблему авторизации веб-сервиса между базами (например, ERP и НСИ), как попытаться извлечь «забытые» пароли из существующих настроек и как правильно создать нового служебного пользователя, не нарушая безопасность системы.
Если база-клиент (в нашем примере — НСИ) ранее успешно подключалась к веб-сервису, значит, учетные данные физически сохранены в ней. В современных конфигурациях 1С, построенных на Библиотеке стандартных подсистем (БСП), пароли обмена не хранятся в открытом виде в реквизитах справочников или планов обмена. Для этого используется механизм БезопасноеХранилищеДанных.
Для того чтобы прочитать эти данные, выполним следующие шаги. Запустим базу НСИ в режиме «Конфигуратор», установим точку останова в месте вызова веб-сервиса или создадим простую внешнюю обработку. Нам понадобится выполнить код в привилегированном режиме, так как обычным пользователям доступ к безопасному хранилищу закрыт.
Рассмотрим пример кода для программного чтения учетных данных из узла плана обмена:
УстановитьПривилегированныйРежим(Истина);
// Укажите имя вашего плана обмена и код узла интеграции
ИмяПланаОбмена = "СинхронизацияДанныхЧерезУниверсальныйФормат";
КодУзла = "ERP";
УзелОбмена = ПланыОбмена[ИмяПланаОбмена].НайтиПоКоду(КодУзла);
Если ЗначениеЗаполнено(УзелОбмена) Тогда
// Пытаемся прочитать структуру авторизации из БСП
ДанныеАвторизации = ОбщегоНазначения.ПрочитатьДанныеИзБезопасногоХранилища(УзелОбмена, "Логин, Пароль");
Если ДанныеАвторизации <> Неопределено Тогда
Сообщить("Логин: " + ДанныеАвторизации.Логин);
Сообщить("Пароль: " + ДанныеАвторизации.Пароль);
Иначе
Сообщить("В безопасном хранилище для данного узла нет записей.");
EndIf;
КонецЕсли;
Если ваша конфигурация использует прямое хранение в регистре сведений, мы можем написать запрос к таблице РегистрСведений.БезопасноеХранилищеДанных с отбором по измерению Владелец, где владельцем будет являться ссылка на конкретный узел плана обмена.
Иногда администраторы настраивают беспарольный доступ для внешних систем, жестко прописывая имя пользователя и пароль 1С непосредственно в конфигурационном файле публикации на веб-сервере (IIS или Apache). Проверим этот вариант.
Разберем по шагам процесс поиска данных на сервере, где опубликован веб-сервис ERP:
C:\inetpub\wwwroot\ИмяПубликации, для Apache на операционных системах семейства Linux — /var/www/ИмяПубликации.default.vrd) и откроем его с помощью любого текстового редактора.ib.Если в файле настроена автоматическая авторизация, мы увидим примерно следующую структуру:
<point xmlns="http://v8.1c.ru/8.2/virtual-resource-system"
connectString="Srvr="AppServer";Ref="ERP_Production";Usr="ws_user";Pwd="SuperSecretPassword123";">
</point>
Если атрибуты Usr и Pwd заполнены в строке подключения внутри файла default.vrd, то любые внешние запросы к этому адресу будут автоматически авторизовываться под указанной учетной записью. Вы можете скопировать эти данные и использовать их.
Часто основной затык заключается в том, что администратор даже не знает точного логина служебного пользователя в ERP, чтобы сбросить ему пароль в режиме «Предприятие». Список пользователей информационной базы может быть огромным, а некоторые учетные записи могут быть скрыты из стандартных списков выбора.
Если наша ERP работает под управлением СУБД (MS SQL Server или PostgreSQL), мы можем быстро извлечь список всех зарегистрированных пользователей системы напрямую из таблиц базы данных.
Проанализируем структуру хранения и выполним простой SQL-запрос к системной таблице пользователей 1С:
SELECT Name, Description, IsActive
FROM dbo.v8users
ORDER BY Name;
Колонка Name содержит точные логины (короткие имена) всех пользователей, заведенных в системе. Среди них будет достаточно легко визуально определить служебного пользователя интеграции. Обычно их называют понятными именами вроде NsiExchange, ws_connection, ExchangeUser или ServiceERP.
Если база-клиент все еще пытается отправлять периодические запросы к ERP (например, по регламентному заданию), мы можем перехватить эти сетевые пакеты и прочитать данные авторизации.
Поскольку веб-сервисы 1С по умолчанию используют метод авторизации Basic Authentication, логин и пароль передаются в каждом HTTP-заголовке в слабо защищенном виде.
Рассмотрим по шагам, как восстановить данные из сетевого запроса:
80 или 443)..1cws).Authorization: Basic dXNlckVSPDpQYXNzd29yZDEyMw==
Basic представляет собой закодированную в формате Base64 пару логина и пароля, разделенную двоеточием.dXNlckVSPDpQYXNzd29yZDEyMw== превратится в userERP:Password123.Если восстановить старые учетные записи не удалось, наиболее правильным решением будет создание нового служебного пользователя в ERP и прописание его данных в базе НСИ. Однако просто дать пользователю роль ПолныеПрава нельзя — это грубое нарушение стандартов безопасности, к тому же внешние соединения под полными правами часто блокируются современными конфигурациями.
Выясним причину, почему новый пользователь может не авторизовываться на веб-сервисе, и настроим его правильно по шагам:
ws_nsi_exchange). Использование кириллицы в логине или пароле веб-сервиса часто приводит к ошибкам кодировки при передаче заголовков авторизации через некоторые веб-серверы.Показывать в списке выбора в карточке пользователя, чтобы скрыть техническую учетную запись от рядовых сотрудников при входе в систему.БазовыеПрава).Общие -> Веб-сервисы -> [ИмяВашегоВебСервиса]. Откроем его свойства, перейдем на вкладку Права и проанализируем, какие именно роли имеют право на его Использование. Назначим одну из этих ролей нашему новому пользователю в режиме «1С:Предприятие».После этого пропишем созданные логин и пароль в настройках подключения в базе НСИ и проверим корректность соединения. Веб-сервис успешно примет авторизацию и предоставит доступ к необходимым функциям обмена данными.