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

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

В современной разработке на платформе 1С:Предприятие взаимодействие с внешними веб-сервисами через HTTP-запросы является одной из самых частых задач. Одной из ключевых сложностей, с которой сталкиваются разработчики, является правильная настройка авторизации. Если в таких инструментах, как Postman, авторизация настраивается выбором типа из списка, то в 1С нам необходимо вручную формировать заголовки запроса. Разберем детально, как передать полученный токен в HTTPЗапрос и какие нюансы следует учитывать.

Использование стандартного заголовка Authorization

Большинство современных API используют стандартный заголовок Authorization. Основная задача программиста 1С — правильно сформировать строку значения этого заголовка. Рассмотрим самый распространенный вариант — использование объекта HTTPЗапрос. Мы создаем запрос и вставляем в его коллекцию заголовков соответствующую запись.

Проанализируем ситуацию на примере самого популярного формата — Bearer-токена (обычно это JWT-токены). Посмотрим на пример кода:


// Создаем объект запроса
Запрос = Новый HTTPЗапрос(Ресурс);

// Добавляем заголовок авторизации. 
// Обратите внимание на обязательный пробел после слова Bearer
Запрос.Заголовки.Вставить("Authorization", "Bearer " + Токен);

// Выполняем запрос через HTTPСоединение
Ответ = Соединение.ВызватьHTTPМетод("GET", Запрос);

Важно помнить, что в зависимости от требований сервера префикс может меняться. Выясним причину, по которой иногда «простой» вариант не срабатывает. Сервер может ожидать префикс Token, OAuth или не требовать префикса вовсе. Если документация к API говорит о "Token Authentication", попробуем следующий вариант:


Запрос.Заголовки.Вставить("Authorization", "Token " + Токен);

Разнообразие форматов и кастомные заголовки

Рассмотрим подробнее случаи, когда стандартный заголовок Authorization не используется. Некоторые разработчики API предпочитают собственные (кастомные) заголовки для передачи ключей доступа. Проанализируем наиболее часто встречающиеся ключи:

Разберем, как это реализовать в коде 1С. Достаточно просто изменить имя ключа в методе Вставить:


Запрос = Новый HTTPЗапрос(ПутьКРесурсу);
Запрос.Заголовки.Вставить("X-API-Key", СекретныйКлюч);
Запрос.Заголовки.Вставить("Content-Type", "application/json");

Передача токена через параметры URL

Иногда сервер ожидает получения токена не в заголовках, а непосредственно в строке адреса (URL). Это часто встречается в GET-запросах для упрощения отладки. Рассмотрим ситуацию: нам нужно обратиться к адресу https://api.service.ru/data и передать токен 12345.

В этом случае мы не трогаем заголовки, а модифицируем саму строку ресурса. Разберем по шагам:

  1. Подготавливаем строку ресурса с параметром: "/data?token=" + Токен.
  2. Если токен содержит спецсимволы (например, "+", "/", "="), обязательно используем функцию КодироватьСтроку.
  3. Создаем HTTPЗапрос с этой строкой.

// Кодируем токен для безопасной передачи в URL
БезопасныйТокен = КодироватьСтроку(Токен, СпособКодированияСтроки.URLКодирование);
РесурсСПараметром = "/v1/getData?access_token=" + БезопасныйТокен;

Запрос = Новый HTTPЗапрос(РесурсСПараметром);
// Заголовки здесь могут быть не нужны для авторизации

Настройка защищенного соединения (SSL/TLS)

Одной из скрытых причин, по которой авторизация «не проходит» в 1С (хотя работает в Postman), является ошибка SSL-соединения. Если вы подключаетесь по протоколу HTTPS, 1С должна проверить сертификат сервера. Если сертификат самоподписанный или используется устаревший протокол TLS, соединение может разорваться до того, как заголовок с токеном будет передан.

Рассмотрим, как правильно инициализировать защищенное соединение, чтобы избежать подобных проблем. Мы рекомендуем использовать объект ЗащищенноеСоединениеOpenSSL. Посмотрим на пример:


// Создаем настройки защищенного соединения
// Параметры (Неопределено, Неопределено) означают игнорирование ошибок сертификатов
Защита = Новый ЗащищенноеСоединениеOpenSSL(Неопределено, Неопределено);

// Инициализируем соединение с использованием защиты
Соединение = Новый HTTPСоединение("api.myserver.ru", 443, , , , 30, Защита);

// Теперь выполняем наш авторизованный запрос
Ответ = Соединение.ОтправитьДляОбработки(Запрос);

Важный момент: использование пустых параметров в ЗащищенноеСоединениеOpenSSL допустимо для отладки или при работе с внутренними ресурсами, но для публичных сервисов рекомендуется настраивать проверку сертификатов согласно корпоративным правилам безопасности.

Диагностика и сравнение с Postman

Если запрос в Postman выполняется успешно, а 1С возвращает ошибку 401 (Unauthorized) или 403 (Forbidden), проанализируем «сырой» (raw) текст запроса — для этого пригодится инструмент логирования и анализа HTTP-запросов для 1С. В Postman есть кнопка «Code», которая позволяет увидеть точный текст заголовков, которые он отправляет. Выясним, какие заголовки Postman добавляет автоматически, так как 1С их сама не добавит.

Чаще всего не хватает следующих заголовков:

Добавим их в наш код для надежности:


Запрос.Заголовки.Вставить("User-Agent", "1C+Enterprise/8.3");
Запрос.Заголовки.Вставить("Accept", "application/json");
Запрос.Заголовки.Вставить("Authorization", "Bearer " + МойТокен);

Итоги

Подводя итог, можно сказать, что авторизация по токену в 1С сводится к точному следованию документации API в части формирования заголовков. Посмотрим на чек-лист перед запуском кода:

  1. Проверен ли тип префикса (Bearer, Token или его отсутствие)?
  2. Правильно ли указано имя заголовка (Authorization или кастомный вариант)?
  3. Настроено ли ЗащищенноеСоединениеOpenSSL для HTTPS?
  4. Добавлены ли вспомогательные заголовки (Content-Type, Accept)?

Следуя этим шагам, вы сможете успешно интегрировать 1С с любым внешним сервисом, поддерживающим токенизированную авторизацию.

← На главную