Как узнать или восстановить данные авторизации для веб-сервиса 1С

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

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

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

Способ 1. Программное извлечение паролей из базы-клиента (Безопасное хранилище)

Если база-клиент (в нашем примере — НСИ) ранее успешно подключалась к веб-сервису, значит, учетные данные физически сохранены в ней. В современных конфигурациях 1С, построенных на Библиотеке стандартных подсистем (БСП), пароли обмена не хранятся в открытом виде в реквизитах справочников или планов обмена. Для этого используется механизм БезопасноеХранилищеДанных.

Для того чтобы прочитать эти данные, выполним следующие шаги. Запустим базу НСИ в режиме «Конфигуратор», установим точку останова в месте вызова веб-сервиса или создадим простую внешнюю обработку. Нам понадобится выполнить код в привилегированном режиме, так как обычным пользователям доступ к безопасному хранилищу закрыт.

Рассмотрим пример кода для программного чтения учетных данных из узла плана обмена:


УстановитьПривилегированныйРежим(Истина);

// Укажите имя вашего плана обмена и код узла интеграции
ИмяПланаОбмена = "СинхронизацияДанныхЧерезУниверсальныйФормат";
КодУзла = "ERP"; 

УзелОбмена = ПланыОбмена[ИмяПланаОбмена].НайтиПоКоду(КодУзла); 

Если ЗначениеЗаполнено(УзелОбмена) Тогда
    // Пытаемся прочитать структуру авторизации из БСП
    ДанныеАвторизации = ОбщегоНазначения.ПрочитатьДанныеИзБезопасногоХранилища(УзелОбмена, "Логин, Пароль");
    
    Если ДанныеАвторизации <> Неопределено Тогда
        Сообщить("Логин: " + ДанныеАвторизации.Логин);
        Сообщить("Пароль: " + ДанныеАвторизации.Пароль);
    Иначе
        Сообщить("В безопасном хранилище для данного узла нет записей.");
    EndIf;
КонецЕсли;

Если ваша конфигурация использует прямое хранение в регистре сведений, мы можем написать запрос к таблице РегистрСведений.БезопасноеХранилищеДанных с отбором по измерению Владелец, где владельцем будет являться ссылка на конкретный узел плана обмена.

Способ 2. Поиск параметров авторизации в файле публикации веб-сервера (VRD)

Иногда администраторы настраивают беспарольный доступ для внешних систем, жестко прописывая имя пользователя и пароль 1С непосредственно в конфигурационном файле публикации на веб-сервере (IIS или Apache). Проверим этот вариант.

Разберем по шагам процесс поиска данных на сервере, где опубликован веб-сервис ERP:

  1. Зайдем на сервер, выполняющий роль веб-сервера.
  2. Перейдем в каталог виртуального приложения. Для IIS стандартный путь обычно выглядит как C:\inetpub\wwwroot\ИмяПубликации, для Apache на операционных системах семейства Linux — /var/www/ИмяПубликации.
  3. Найдем файл с расширением .vrd (обычно это default.vrd) и откроем его с помощью любого текстового редактора.
  4. Проанализируем строку подключения к базе данных в параметре ib.

Если в файле настроена автоматическая авторизация, мы увидим примерно следующую структуру:


<point xmlns="http://v8.1c.ru/8.2/virtual-resource-system"
       connectString="Srvr=&quot;AppServer&quot;;Ref=&quot;ERP_Production&quot;;Usr=&quot;ws_user&quot;;Pwd=&quot;SuperSecretPassword123&quot;;">
</point>

Если атрибуты Usr и Pwd заполнены в строке подключения внутри файла default.vrd, то любые внешние запросы к этому адресу будут автоматически авторизовываться под указанной учетной записью. Вы можете скопировать эти данные и использовать их.

Способ 3. Поиск имени служебного пользователя через СУБД

Часто основной затык заключается в том, что администратор даже не знает точного логина служебного пользователя в ERP, чтобы сбросить ему пароль в режиме «Предприятие». Список пользователей информационной базы может быть огромным, а некоторые учетные записи могут быть скрыты из стандартных списков выбора.

Если наша ERP работает под управлением СУБД (MS SQL Server или PostgreSQL), мы можем быстро извлечь список всех зарегистрированных пользователей системы напрямую из таблиц базы данных.

Проанализируем структуру хранения и выполним простой SQL-запрос к системной таблице пользователей 1С:


SELECT Name, Description, IsActive 
FROM dbo.v8users 
ORDER BY Name;

Колонка Name содержит точные логины (короткие имена) всех пользователей, заведенных в системе. Среди них будет достаточно легко визуально определить служебного пользователя интеграции. Обычно их называют понятными именами вроде NsiExchange, ws_connection, ExchangeUser или ServiceERP.

Способ 4. Перехват и декодирование сетевого трафика (Basic Auth)

Если база-клиент все еще пытается отправлять периодические запросы к ERP (например, по регламентному заданию), мы можем перехватить эти сетевые пакеты и прочитать данные авторизации.

Поскольку веб-сервисы 1С по умолчанию используют метод авторизации Basic Authentication, логин и пароль передаются в каждом HTTP-заголовке в слабо защищенном виде.

Рассмотрим по шагам, как восстановить данные из сетевого запроса:

  1. Запустим сетевой анализатор (например, Wireshark) на стороне веб-сервера или на стороне отправляющей базы.
  2. Отфильтруем трафик по порту веб-сервера (обычно 80 или 443).
  3. Найдем входящий HTTP-запрос к нашему файлу публикации (например, к файлу с расширением .1cws).
  4. Посмотрим на заголовки запроса (HTTP Headers). Нам нужна строка:

    Authorization: Basic dXNlckVSPDpQYXNzd29yZDEyMw==

  5. Строка после слова Basic представляет собой закодированную в формате Base64 пару логина и пароля, разделенную двоеточием.
  6. Декодируем эту строку. Для этого можно воспользоваться встроенными функциями платформы 1С или любым декодером. Строка dXNlckVSPDpQYXNzd29yZDEyMw== превратится в userERP:Password123.

Способ 5. Правильная настройка нового пользователя (если старый утерян окончательно)

Если восстановить старые учетные записи не удалось, наиболее правильным решением будет создание нового служебного пользователя в ERP и прописание его данных в базе НСИ. Однако просто дать пользователю роль ПолныеПрава нельзя — это грубое нарушение стандартов безопасности, к тому же внешние соединения под полными правами часто блокируются современными конфигурациями.

Выясним причину, почему новый пользователь может не авторизовываться на веб-сервисе, и настроим его правильно по шагам:

  1. В ERP создадим нового пользователя. Имя и пароль настоятельно рекомендуется задавать латинскими буквами без пробелов (например, имя ws_nsi_exchange). Использование кириллицы в логине или пароле веб-сервиса часто приводит к ошибкам кодировки при передаче заголовков авторизации через некоторые веб-серверы.
  2. Снимем флаг Показывать в списке выбора в карточке пользователя, чтобы скрыть техническую учетную запись от рядовых сотрудников при входе в систему.
  3. Назначим пользователю минимально необходимый набор ролей. Перейдем в права пользователя и отметим:
    • Запуск внешнего соединения (системное право платформы, без которого невозможно физически подключиться к базе через COM или Web-сервис).
    • Базовые права внешнего пользователя (или стандартная роль БСП БазовыеПрава).
  4. Предоставим права непосредственно на сам веб-сервис. В конфигураторе найдем ветку Общие -> Веб-сервисы -> [ИмяВашегоВебСервиса]. Откроем его свойства, перейдем на вкладку Права и проанализируем, какие именно роли имеют право на его Использование. Назначим одну из этих ролей нашему новому пользователю в режиме «1С:Предприятие».

После этого пропишем созданные логин и пароль в настройках подключения в базе НСИ и проверим корректность соединения. Веб-сервис успешно примет авторизацию и предоставит доступ к необходимым функциям обмена данными.

← На главную