Как прочитать и записать файл на Яндекс Диск из 1С, используя логин и пароль без OAuth-токена

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

При разработке тиражных решений или небольших внутренних обработок в 1С часто возникает задача интеграции с облачными хранилищами, в частности с Яндекс Диском. Стандартный путь через OAuth 2.0 требует регистрации приложения, работы с браузером и получения токенов, что может быть избыточным для простых задач или неудобным для конечного пользователя. Рассмотрим альтернативный и эффективный способ: использование протокола WebDAV с применением специальных паролей приложений.

Выясним причину выбора WebDAV вместо API

Традиционное API Яндекс Диска работает на базе токенов. Для программиста это означает необходимость создания интерфейса для авторизации пользователя, обработки редиректов и хранения секретных ключей приложения. Если же мы разрабатываем инструмент, где пользователю проще один раз ввести логин и пароль, нам на помощь приходит протокол WebDAV. Это расширение протокола HTTP, которое позволяет клиентам выполнять операции редактирования и управления файлами на удаленном сервере. Проанализируем, как настроить такой доступ. При разработке и отладке взаимодействия по протоколу HTTP полезно использовать инструмент для тестирования REST API в 1С.

Шаг 1. Настройка безопасности в Яндекс ID

Использовать основной пароль от почтового ящика для доступа по WebDAV нельзя — Яндекс блокирует такие попытки в целях безопасности. Разберем по шагам, как создать специальный пароль приложения:

  1. Перейдем в личный кабинет Яндекс ID в раздел «Безопасность».
  2. Найдем пункт «Пароли приложений».
  3. Выберем тип приложения «Файлы (Диск)».
  4. Придумаем название для пароля (например, «1С_Интеграция») и нажмем «Создать».

Яндекс сгенерирует уникальный 16-значный код. Его нужно сохранить, так как он заменяет ваш основной пароль при авторизации через WebDAV. Именно эта комбинация «логин + пароль приложения» позволит нам работать без токенов, тогда как для других площадок может потребоваться получение токена авторизации RuStore.

Шаг 2. Технические параметры подключения

Проанализируем параметры, которые потребуются нам для написания кода в 1С:

Шаг 3. Реализация авторизации в 1С

Для работы по протоколу WebDAV в 1С мы будем использовать объект HTTPСоединение. Самый важный нюанс здесь — формирование заголовка Authorization. Рассмотрим пример формирования строки авторизации, где логин и пароль кодируются в формат Base64.

Посмотрим на пример кода для инициализации соединения:


// Логин пользователя и пароль приложения
Логин = "myname@yandex.ru";
ПарольПриложения = "abcd-efgh-ijkl-mnop"; 

// Кодируем данные для Basic-авторизации
СтрокаАвторизации = Логин + ":" + ПарольПриложения;
ДвоичныеДанныеАвторизации = ПолучитьДвоичныеДанныеИзСтроки(СтрокаАвторизации, КодировкаТекста.UTF8);
ТокенBase64 = Base64Строка(ДвоичныеДанныеАвторизации);

// Создаем защищенное соединение
ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL();
Соединение = Новый HTTPСоединение("webdav.yandex.ru", 443, , , , 30, ЗащищенноеСоединение);

Шаг 4. Запись файла на Яндекс Диск (Метод PUT)

Для загрузки файла используется стандартный HTTP-метод PUT. Важно помнить, что в заголовках запроса мы должны передать наш сгенерированный Authorization. Разберем процесс отправки файла:


Заголовки = Новый Соответствие;
Заголовки.Вставить("Authorization", "Basic " + ТокенBase64);
Заголовки.Вставить("Expect", ""); // Убираем ожидание подтверждения от сервера

ПутьНаДиске = "/my_folder/test_file.png";
Запрос = Новый HTTPЗапрос(ПутьНаДиске, Заголовки);
Запрос.УстановитьТелоИзФайла("C:\LocalFiles\image.png");

Ответ = Соединение.Записать(Запрос);

Если Ответ.КодСостояния = 201 Тогда
    Сообщить("Файл успешно загружен!");
Иначе
    Сообщить("Ошибка загрузки: " + Ответ.КодСостояния);
КонецЕсли;

Шаг 5. Чтение и скачивание файла (Метод GET)

Проанализируем ситуацию, когда нам нужно прочитать данные с диска. Метод GET позволяет получить содержимое файла напрямую в память или сохранить его на локальный диск.


Запрос = Новый HTTPЗапрос("/my_folder/test_file.png", Заголовки);
Ответ = Соединение.Получить(Запрос);

Если Ответ.КодСостояния = 200 Тогда
    Ответ.ПолучитьТелоКакДвоичныеДанные().Записать("C:\Temp\downloaded_file.png");
    Сообщить("Файл успешно прочитан и сохранен.");
КонецЕсли;

Шаг 6. Работа со структурой папок (Метод MKCOL)

Одной из особенностей WebDAV является то, что он не умеет создавать вложенные папки рекурсивно. Если вы хотите положить файл по пути /Folder1/Folder2/file.txt, а папки Folder1 еще не существует, сервер вернет ошибку 409 Conflict — для отладки подобных интеграций поможет универсальный инструмент логирования HTTP-запросов в 1С. Рассмотрим, как правильно создавать каталоги с помощью метода MKCOL:


ЗапросMKCOL = Новый HTTPЗапрос("/NewFolder", Заголовки);
Ответ = Соединение.ОтправитьДляОбъекта("MKCOL", ЗапросMKCOL);

Если Ответ.КодСостояния = 201 Тогда
    Сообщить("Папка создана");
КонецЕсли;

Рекомендуется реализовать функцию, которая будет разбивать путь на части и последовательно проверять/создавать каждый уровень вложенности.

Ограничения и важные нюансы

Несмотря на простоту, работа через WebDAV имеет свои лимиты, которые следует учитывать при проектировании системы:

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

Таким образом, использование WebDAV в связке с паролями приложений — это отличный компромисс для разработчика 1С. Мы получаем возможность прямой работы с файлами «по логину и паролю», избегая сложной настройки OAuth-авторизации, что идеально подходит для автоматической выгрузки отчетов, обмена картинками товаров или резервного копирования небольших объемов данных. Для готовой автоматизации этого процесса можно использовать обработку для автоматической выгрузки отчетов в облако по расписанию.

← На главную