При начале работы с 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. Браузер, получая этот ответ, интерпретирует его как сигнал для показа стандартной формы ввода логина и пароля.
Давайте разберем по шагам, какими способами можно управлять этим поведением в зависимости от задач вашего проекта.
Если разрабатываемый 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="C:\base";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 заменяются на специальную сущность ". После сохранения файла default.vrd обязательно перезапустите службу веб-сервера (Apache или IIS), чтобы изменения вступили в силу.
Если вам требуется быстро протестировать работу GET-метода прямо из адресной строки браузера без редактирования конфигурационных файлов веб-сервера, вы можете передать логин и пароль непосредственно в URL запроса.
Формат такого запроса выглядит следующим образом:
http://Логин:Пароль@localhost/satt/hs/mapp/v1/phonenumber/
Разберем этот вариант подробнее. Браузер автоматически распарсит данную строку, закодирует пару логин-пароль по стандарту Base64 и добавит в заголовки HTTP-запроса стандартный заголовок авторизации:
Authorization: Basic bG9naW46cGFzc3dvcmQ=
Внимание! Этот метод категорически не рекомендуется использовать в рабочих (production) системах. Передача учетных данных в открытом виде по незащищенному протоколу HTTP подвергает систему риску перехвата трафика (скниффинга). Данный способ подходит исключительно для этапа локальной отладки и быстрого тестирования — для этого пригодится инструмент сбора и анализа HTTP-запросов для 1С.
Иногда начинающие разработчики совершают опасную ошибку: отключают всех пользователей в базе 1С, чтобы "убрать авторизацию", либо используют учетную запись администратора с полными правами для публикации API. Делать так категорически запрещено.
Рекомендуется придерживаться следующих правил безопасности при настройке интеграций:
api_crm, api_site).Если передача паролей в открытом виде или через файл 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С по сети.
Если ваш сервис будет работать внутри корпоративной сети, логичным шагом может показаться использование доменной авторизации Active Directory (сквозная авторизация Windows).
Проанализируем основные сложности, которые возникают при такой настройке:
AD\ActiveUser).rphost) развернуты на физически разных серверах, то по умолчанию доменная авторизация не сработает. IIS не сможет транслировать учетные данные пользователя дальше на сервер 1С. Для исправления этой проблемы системным администраторам потребуется настраивать Kerberos-делегирование и прописывать имена участников службы (SPN — Service Principal Names) в Active Directory.HTTPСоединение, использование Windows-авторизации может вызвать непредвиденные сбои (особенно если вызывающая сторона работает под управлением ОС Linux). В таких случаях надежнее использовать явную базовую авторизацию по HTTPS или JWT-токены.Мы рассмотрели различные подходы к настройке авторизации HTTP-сервисов в 1С. Выбор конкретного решения зависит от архитектуры вашего проекта:
default.vrd.