При построении обмена данными между 1С и внешними веб-сервисами, разработчики часто сталкиваются с необходимостью использования специфических протоколов аутентификации. Если стандартная авторизация Basic Auth не дает результата и сервер возвращает ошибку 401 Unauthorized, вероятнее всего, API системы использует протокол Hawk. Рассмотрим детально, как выявить проблему и какие шаги предпринять для её решения.
В ходе реализации POST-запроса через объект HTTPСоединение, программисты часто пробуют передать учетные данные через Заголовки, используя Base64-кодирование логина и пароля. Однако, если документация API требует Hawk-авторизацию, такой подход работать не будет. Ошибка 401 свидетельствует о том, что сервер не может распознать переданные учетные данные, так как они не соответствуют ожидаемому формату подписи.
Разберем типичный ошибочный подход, который часто встречается в коде:
АдресСервера = "disloy.com";
Ресурс = "/api/rs/v2/order/open/";
HawkID = "**";
// Попытка использовать стандартный Basic Auth, который не подходит для Hawk
СтрокаАвторизации = ПолучитьBase64СтрокуИзДвоичныхДанных(ПолучитьДвоичныеДанныеИзСтроки("Hawk id="+HawkID, КодировкаТекста.UTF8, Ложь));
Заголовки = Новый Соответствие;
Заголовки.Вставить("Authorization", "Basic "+ СтрокаАвторизации);
Запрос = Новый HTTPСоединение(АдресСервера, 443);
// ... выполнение запроса
Такой код неверен, так как протокол Hawk требует создания цифровой подписи (signature) на основе набора параметров запроса, а не простого кодирования строки пользователя в Base64.
Для корректной работы с протоколом Hawk необходимо понимать, что каждый HTTP-запрос должен быть подписан. Процесс формирования запроса включает следующие этапы:
POST), URI ресурса, адрес хоста, порт, timestamp (время) и nonce (случайную строку). Эти данные подписываются секретным ключом с использованием алгоритма HMAC-SHA256.Authorization передается не просто логин, а структурированная строка, содержащая идентификатор ключа, случайную строку, временную метку и саму подпись.Поскольку реализация алгоритма хеширования HMAC-SHA256 на встроенном языке 1С является сложной и трудоемкой задачей, мы рекомендуем следующие подходы для успешного завершения задачи:
DLL или использование COM-объектов (например, написанных на C# или .NET), которые уже содержат готовые методы для подписи Hawk. Это позволит избежать ошибок в реализации алгоритмов шифрования внутри самой платформы 1С.Postman. В этой программе реализована встроенная поддержка Hawk. Сравните заголовки, которые формирует Postman, с теми, что формирует ваша 1С. Это поможет найти расхождения в структуре данных.POST-запроса с телом в формате JSON, всегда используйте корректную кодировку. Используйте метод УстановитьТелоИзСтроки(СтрокаJSON, , Истина) с параметром Истина для корректной передачи UTF-8.Если вы столкнулись с ошибкой 401, не пытайтесь подобрать параметры Basic Auth. Проанализируйте документацию к вашему API: если упоминается Hawk, вам необходимо сфокусироваться на правильном формировании строки подписи. Использование специализированных библиотек или внешних компонентов для хеширования — самый надежный путь для программиста 1С, позволяющий сэкономить время и избежать проблем с безопасностью данных при передаче.