Как правильно реализовать авторизацию при обращении к HTTP-сервису 1С из другой базы?

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

Когда вы создаете HTTP-сервис в 1С для взаимодействия между двумя информационными системами, вопрос безопасности и корректной авторизации становится приоритетным. Давайте разберем, как грамотно организовать процесс обмена данными, чтобы обеспечить надежность и безопасность соединения.

Использование пользователей базы для авторизации

Основной способ авторизации в HTTP-сервисе 1С — это использование учетных записей пользователей, заведенных непосредственно в информационной базе, к которой вы обращаетесь. При отправке HTTP-запроса вы передаете логин и пароль в заголовке Authorization. 1С автоматически пытается выполнить вход в систему под этим пользователем.

Важный аспект: Права пользователя, указанного в запросе, определяют границы доступных действий. Если вы используете администратора, то сервис будет обладать неограниченными правами в рамках кода, который он выполняет. Это небезопасно.

Рекомендуемый подход: выделенный пользователь для интеграции

Чтобы следовать принципу минимальных привилегий, мы рекомендуем создавать отдельного служебного пользователя специально для интеграционных обменов. Рассмотрим, как это реализовать:

  1. Создайте в базе-приемнике нового пользователя (например, Интеграция_HTTP).
  2. Назначьте ему только те права, которые критически необходимы для работы конкретного сервиса. Например, если сервис только отдает заказы, пользователю достаточно прав на чтение соответствующих справочников и документов.
  3. Используйте логин и пароль именно этого пользователя в коде обращения из базы-источника.

Посмотрим на пример формирования заголовка в коде 1С:


// Формируем строку авторизации в формате base64
СтрокаАвторизации = "Интеграция_HTTP:ВашПароль";
ДвоичныеДанные = ПолучитьДвоичныеДанныеИзСтроки(СтрокаАвторизации, "UTF-8", Ложь);
Base64Строка = Base64Строка(ДвоичныеДанные);

Заголовки = Новый Соответствие();
Заголовки.Вставить("Content-Type", "application/json; charset=UTF-8");
Заголовки.Вставить("Authorization", "Basic " + Base64Строка);

// Создаем соединение и запрос
HTTPСоединение = Новый HTTPСоединение("сайт.ru", 443, , , , , Новый ЗащищенноеСоединениеOpenSSL());
HTTPЗапрос = Новый HTTPЗапрос("/api/orders", Заголовки);

Настройка публикации и файл default.vrd

Существует возможность указать пользователя по умолчанию в файле default.vrd, который создается при публикации базы на веб-сервере. Если вы пропишете там пользователя, то запросы будут выполняться от его имени, даже если в самом HTTP-запросе аутентификационные данные не переданы.

Однако, проанализировав ситуацию, мы не рекомендуем использовать этот метод как основной. Во-первых, это может привести к конфликтам, если в базе работают другие пользователи через веб-клиент. Во-вторых, разделение прав становится менее прозрачным. Лучше всего иметь отдельную публикацию для HTTP-сервисов, если требуется специфическая настройка доступа на уровне веб-сервера.

Безопасность и лучшие практики

Разберем основные правила, которые помогут избежать проблем при работе с сервисами:

Таким образом, использование отдельного пользователя с ограниченными правами является «золотым стандартом» при разработке интеграций на HTTP-сервисах 1С. Это обеспечивает гибкость управления доступом и высокий уровень безопасности вашей информационной системы.

← На главную