При разработке тиражных решений или небольших внутренних обработок в 1С часто возникает задача интеграции с облачными хранилищами, в частности с Яндекс Диском. Стандартный путь через OAuth 2.0 требует регистрации приложения, работы с браузером и получения токенов, что может быть избыточным для простых задач или неудобным для конечного пользователя. Рассмотрим альтернативный и эффективный способ: использование протокола WebDAV с применением специальных паролей приложений.
Традиционное API Яндекс Диска работает на базе токенов. Для программиста это означает необходимость создания интерфейса для авторизации пользователя, обработки редиректов и хранения секретных ключей приложения. Если же мы разрабатываем инструмент, где пользователю проще один раз ввести логин и пароль, нам на помощь приходит протокол WebDAV. Это расширение протокола HTTP, которое позволяет клиентам выполнять операции редактирования и управления файлами на удаленном сервере. Проанализируем, как настроить такой доступ. При разработке и отладке взаимодействия по протоколу HTTP полезно использовать инструмент для тестирования REST API в 1С.
Использовать основной пароль от почтового ящика для доступа по WebDAV нельзя — Яндекс блокирует такие попытки в целях безопасности. Разберем по шагам, как создать специальный пароль приложения:
Яндекс сгенерирует уникальный 16-значный код. Его нужно сохранить, так как он заменяет ваш основной пароль при авторизации через WebDAV. Именно эта комбинация «логин + пароль приложения» позволит нам работать без токенов, тогда как для других площадок может потребоваться получение токена авторизации RuStore.
Проанализируем параметры, которые потребуются нам для написания кода в 1С:
webdav.yandex.ruДля работы по протоколу WebDAV в 1С мы будем использовать объект HTTPСоединение. Самый важный нюанс здесь — формирование заголовка Authorization. Рассмотрим пример формирования строки авторизации, где логин и пароль кодируются в формат Base64.
Посмотрим на пример кода для инициализации соединения:
// Логин пользователя и пароль приложения
Логин = "myname@yandex.ru";
ПарольПриложения = "abcd-efgh-ijkl-mnop";
// Кодируем данные для Basic-авторизации
СтрокаАвторизации = Логин + ":" + ПарольПриложения;
ДвоичныеДанныеАвторизации = ПолучитьДвоичныеДанныеИзСтроки(СтрокаАвторизации, КодировкаТекста.UTF8);
ТокенBase64 = Base64Строка(ДвоичныеДанныеАвторизации);
// Создаем защищенное соединение
ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL();
Соединение = Новый HTTPСоединение("webdav.yandex.ru", 443, , , , 30, ЗащищенноеСоединение);
Для загрузки файла используется стандартный HTTP-метод PUT. Важно помнить, что в заголовках запроса мы должны передать наш сгенерированный Authorization. Разберем процесс отправки файла:
Заголовки = Новый Соответствие;
Заголовки.Вставить("Authorization", "Basic " + ТокенBase64);
Заголовки.Вставить("Expect", ""); // Убираем ожидание подтверждения от сервера
ПутьНаДиске = "/my_folder/test_file.png";
Запрос = Новый HTTPЗапрос(ПутьНаДиске, Заголовки);
Запрос.УстановитьТелоИзФайла("C:\LocalFiles\image.png");
Ответ = Соединение.Записать(Запрос);
Если Ответ.КодСостояния = 201 Тогда
Сообщить("Файл успешно загружен!");
Иначе
Сообщить("Ошибка загрузки: " + Ответ.КодСостояния);
КонецЕсли;
Проанализируем ситуацию, когда нам нужно прочитать данные с диска. Метод GET позволяет получить содержимое файла напрямую в память или сохранить его на локальный диск.
Запрос = Новый HTTPЗапрос("/my_folder/test_file.png", Заголовки);
Ответ = Соединение.Получить(Запрос);
Если Ответ.КодСостояния = 200 Тогда
Ответ.ПолучитьТелоКакДвоичныеДанные().Записать("C:\Temp\downloaded_file.png");
Сообщить("Файл успешно прочитан и сохранен.");
КонецЕсли;
Одной из особенностей WebDAV является то, что он не умеет создавать вложенные папки рекурсивно. Если вы хотите положить файл по пути /Folder1/Folder2/file.txt, а папки Folder1 еще не существует, сервер вернет ошибку 409 Conflict — для отладки подобных интеграций поможет универсальный инструмент логирования HTTP-запросов в 1С. Рассмотрим, как правильно создавать каталоги с помощью метода MKCOL:
ЗапросMKCOL = Новый HTTPЗапрос("/NewFolder", Заголовки);
Ответ = Соединение.ОтправитьДляОбъекта("MKCOL", ЗапросMKCOL);
Если Ответ.КодСостояния = 201 Тогда
Сообщить("Папка создана");
КонецЕсли;
Рекомендуется реализовать функцию, которая будет разбивать путь на части и последовательно проверять/создавать каждый уровень вложенности.
Несмотря на простоту, работа через WebDAV имеет свои лимиты, которые следует учитывать при проектировании системы:
Важный момент безопасности: Никогда не храните пароль приложения в открытом виде в коде конфигурации. Используйте для этого защищенные хранилища данных 1С или константы с ограниченным доступом, чтобы предотвратить утечку данных пользователя.
Таким образом, использование WebDAV в связке с паролями приложений — это отличный компромисс для разработчика 1С. Мы получаем возможность прямой работы с файлами «по логину и паролю», избегая сложной настройки OAuth-авторизации, что идеально подходит для автоматической выгрузки отчетов, обмена картинками товаров или резервного копирования небольших объемов данных. Для готовой автоматизации этого процесса можно использовать обработку для автоматической выгрузки отчетов в облако по расписанию.