Как убрать запрос авторизации при обращении к HTTP-сервису 1С?

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

При начале работы с HTTP-сервисами в среде «1С:Предприятие 8.3» разработчики часто сталкиваются с типовой проблемой: при попытке вызвать опубликованный HTTP-сервис через веб-браузер или стороннюю утилиту (например, Postman) (поможет готовый HTTP-сервис REST API для 1С) система выдает всплывающее окно с требованием ввести имя пользователя и пароль. Сайт при этом сообщает: «1c:Enterprise 8.3». Попытки просто проигнорировать это окно приводят к ошибке доступа.

В этой статье мы подробно разберем, почему возникает данное окно, как правильно настроить авторизацию для внешних запросов, рассмотрим несколько альтернативных способов решения — от простого отключения проверки подлинности до настройки безопасной авторизации на базе токенов JWT и протокола OAuth 2.0.


Выясняем причину: почему платформа запрашивает авторизацию?

Рассмотрим механизм работы веб-публикации 1С. Когда мы публикуем информационную базу на веб-сервере (Apache или IIS), платформа создает специальный файл конфигурации виртуального ресурса — default.vrd. Этот файл сообщает веб-серверу, как именно взаимодействовать с базой данных 1С.

Если в вашей информационной базе создан хотя бы один пользователь (а в реальных базах они есть всегда), то по умолчанию платформа включает режим строгой аутентификации для любых внешних подключений, включая HTTP-сервисы. При отправке GET- или POST-запроса веб-сервер возвращает клиенту HTTP-статус 401 Unauthorized с заголовком WWW-Authenticate. Браузер, получая этот ответ, интерпретирует его как сигнал для показа стандартной формы ввода логина и пароля.

Давайте разберем по шагам, какими способами можно управлять этим поведением в зависимости от задач вашего проекта.


Решение 1. Настройка анонимного доступа через файл default.vrd

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

Для реализации этого метода нам потребуется отредактировать файл публикации default.vrd, который находится в каталоге вашей веб-публикации на сервере (например, для Apache на Windows путь по умолчанию может быть следующим: C:\inetpub\wwwroot\satt\default.vrd или в соответствующей папке настроек Apache).

Проанализируем структуру этого файла. Внутри корневого тега <point> находится параметр ib, который описывает строку подключения к информационной базе. Чтобы убрать всплывающее окно авторизации, мы должны прописать имя пользователя и пароль служебной учетной записи 1С прямо в строке подключения. Веб-сервер будет использовать эти данные для автоматической авторизации всех входящих запросов.

Посмотрим на пример конфигурации файла default.vrd для файлового варианта информационной базы:


<?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="/satt"
       ib="File=&quot;C:\base&quot;;Usr=ИмяПользователяAPI;Pwd=ПарольПользователяAPI;">
    <ws>
        <point name="Exchange" alias="Exchange.1cws" enable="false"/>
    </ws>
    <httpServices publishByDefault="true">
        <service name="mapp" alias="mapp" enable="true"/>
    </httpServices>
</point>

Если у вас используется клиент-серверный вариант работы (SQL), то строка подключения в параметре ib будет выглядеть следующим образом:


ib="Srvr=Server1C;Ref=BaseName;Usr=ИмяПользователяAPI;Pwd=ПарольПользователяAPI;"

Важное примечание: Обратите внимание на экранирование символов в XML. Двойные кавычки внутри значения атрибута ib заменяются на специальную сущность &quot;. После сохранения файла default.vrd обязательно перезапустите службу веб-сервера (Apache или IIS), чтобы изменения вступили в силу.


Решение 2. Быстрая передача учетных данных в строке запроса (Basic Auth)

Если вам требуется быстро протестировать работу GET-метода прямо из адресной строки браузера без редактирования конфигурационных файлов веб-сервера, вы можете передать логин и пароль непосредственно в URL запроса.

Формат такого запроса выглядит следующим образом:

http://Логин:Пароль@localhost/satt/hs/mapp/v1/phonenumber/

Разберем этот вариант подробнее. Браузер автоматически распарсит данную строку, закодирует пару логин-пароль по стандарту Base64 и добавит в заголовки HTTP-запроса стандартный заголовок авторизации:

Authorization: Basic bG9naW46cGFzc3dvcmQ=

Внимание! Этот метод категорически не рекомендуется использовать в рабочих (production) системах. Передача учетных данных в открытом виде по незащищенному протоколу HTTP подвергает систему риску перехвата трафика (скниффинга). Данный способ подходит исключительно для этапа локальной отладки и быстрого тестирования — для этого пригодится инструмент сбора и анализа HTTP-запросов для 1С.


Решение 3. Лучшие практики безопасности при создании API-пользователей

Иногда начинающие разработчики совершают опасную ошибку: отключают всех пользователей в базе 1С, чтобы "убрать авторизацию", либо используют учетную запись администратора с полными правами для публикации API. Делать так категорически запрещено.

Рекомендуется придерживаться следующих правил безопасности при настройке интеграций:

  1. Создание выделенного пользователя. Для каждой внешней системы или интеграции (например, для сайта, для мобильного приложения, для службы доставки) создавайте отдельного пользователя в списке "Пользователи" в Конфигураторе 1С (например, api_crm, api_site).
  2. Минимизация прав доступа. У этого пользователя не должно быть полных прав. Создайте в конфигурации специальную роль, в которой будут стоять флажки только на запуск конкретного HTTP-сервиса и чтение/запись только тех объектов, которые действительно необходимы для работы этого интеграционного шва.
  3. Отключение интерактивного входа. В свойствах пользователя в Конфигураторе снимите флажок "Показывать в списке выбора". Также настоятельно рекомендуется запретить данному пользователю интерактивный вход в систему через тонкий, толстый или веб-клиенты, оставив доступ только для программного интерфейса.

Решение 4. Настройка современной авторизации по JWT-токенам (начиная с платформы 8.3.21)

Если передача паролей в открытом виде или через файл default.vrd не удовлетворяет вашим требованиям безопасности, начиная с версии платформы «1С:Предприятие 8.3.21», вы можете использовать современный и безопасный стандарт авторизации — JSON Web Tokens (JWT).

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

Рассмотрим, как настроить этот механизм в файле default.vrd. В тело файла публикации добавляется описание доверенных эмитентов токенов (issuers) и правила сопоставления полей токена с пользователями базы данных 1С:


<jwt>
    <issuers>
        <issuer name="MyAuthServer" 
                sharedKey="СекретныйКлючДляПроверкиПодписи1234567890" 
                claimForUserName="sub"/>
    </issuers>
</jwt>

Внешнее приложение при обращении к вашему HTTP-сервису должно будет передавать токен в заголовке запроса:

Authorization: Bearer [Здесь_Ваш_Токен_Доступа]

Для работы с токенами в синтаксисе платформы 1С появился специальный объект ТокенДоступа. Использование этого механизма позволяет полностью исключить передачу паролей пользователей 1С по сети.


Решение 5. Трудности доменной (OS) авторизации через веб-сервер

Если ваш сервис будет работать внутри корпоративной сети, логичным шагом может показаться использование доменной авторизации Active Directory (сквозная авторизация Windows).

Проанализируем основные сложности, которые возникают при такой настройке:


Резюме и рекомендации

Мы рассмотрели различные подходы к настройке авторизации HTTP-сервисов в 1С. Выбор конкретного решения зависит от архитектуры вашего проекта:

← На главную