Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

Документы

Медиа

Назад
Вопрос про JavaScript: pre-signed URL, S3, cloud storage, temporary access, signed URL

Как реализовать безопасную временную ссылку (pre-signed URL) для скачивания файлов?

Вопрос проверяет понимание механизма безопасной временной выдачи доступа к защищённым файлам через предварительно подписанные URL, что необходимо для контроля доступа в облачных хранилищах.

Короткий ответ

Pre-signed URL — это временная ссылка, которая даёт право скачать или загрузить файл в облачное хранилище (например, Amazon S3) без прямых учётных данных. Ссылка генерируется на стороне сервера с использованием секретного ключа и содержит подпись, срок действия и параметры доступа. Это позволяет безопасно делиться файлами с клиентами или внешними системами, не открывая публичный доступ ко всему бакету. После истечения срока ссылка становится недействительной.

Длинный ответ

Pre-signed URL (предварительно подписанный URL) — это механизм, предоставляющий временный и ограниченный доступ к объекту в защищённом облачном хранилище, таком как Amazon S3, Google Cloud Storage или Azure Blob Storage. Вместо того чтобы делать файлы публичными, сервер генерирует уникальную ссылку, содержащую криптографическую подпись, параметры операции (например, GET для скачивания) и срок действия. Это позволяет клиенту (браузеру, мобильному приложению) напрямую обращаться к хранилищу, минуя сервер для передачи самих файлов, что снижает нагрузку на серверное приложение.

Как это работает

Процесс обычно включает следующие шаги:

  • Аутентификация на сервере: Пользователь запрашивает доступ к файлу через ваш backend API, проходя стандартную аутентификацию (например, по токену).
  • Генерация ссылки: Серверное приложение, используя SDK облачного провайдера и свои учётные данные (секретный ключ), создаёт pre-signed URL для конкретного файла. В URL включаются: endpoint хранилища, имя бакета, ключ объекта, срок действия (например, 5 минут) и цифровая подпись.
  • Выдача ссылки клиенту: Сгенерированный URL возвращается клиенту в ответе API.
  • Прямой доступ: Клиент использует этот URL для прямого скачивания файла из облачного хранилища. Хранилище проверяет подпись и срок действия самостоятельно.

Пример кода (Node.js с AWS SDK)

const AWS = require('aws-sdk');
const s3 = new AWS.S3({
  region: 'us-east-1',
  accessKeyId: process.env.AWS_ACCESS_KEY_ID,
  secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY
});

async function generatePresignedUrl(bucketName, objectKey, expiresIn = 300) {
  const params = {
    Bucket: bucketName,
    Key: objectKey,
    Expires: expiresIn // Время жизни ссылки в секундах
  };
  
  try {
    // Генерация URL для операции GET (скачивание)
    const url = await s3.getSignedUrlPromise('getObject', params);
    return url;
  } catch (error) {
    console.error('Error generating pre-signed URL:', error);
    throw error;
  }
}

// Использование
const downloadUrl = await generatePresignedUrl('my-secure-bucket', 'reports/q3.pdf', 300);
console.log('Pre-signed URL:', downloadUrl);

В этом примере getSignedUrlPromise создаёт подписанный URL для скачивания файла q3.pdf. Ссылка будет действительна 5 минут (300 секунд). Аналогично можно генерировать URL для загрузки (PUT) с помощью 'putObject'.

Где применяется

Pre-signed URL широко используются в сценариях, где необходимо предоставить временный доступ к приватным файлам:

  • Скачивание купленного контента: Пользователь, купивший цифровой товар (книгу, музыку), получает временную ссылку для скачивания.
  • Загрузка пользовательских файлов: Клиентское приложение получает pre-signed URL для прямой загрузки больших файлов в S3, минуя сервер.
  • Обмен документами во внешних интеграциях: Безопасная передача файлов партнёрам или другим системам на ограниченное время.
  • Генерация отчётов: Система формирует отчёт, сохраняет его в приватное хранилище и выдаёт пользователю временную ссылку для скачивания.

Вывод: Pre-signed URL следует применять, когда нужно обеспечить безопасный, контролируемый по времени доступ к файлам в облачном хранилище, разгрузив свой сервер от передачи больших объёмов данных. Это стандартный и надёжный паттерн для работы с приватным контентом в облачных приложениях.

Уровень

  • Рейтинг:

    4

  • Сложность:

    5

Навыки

  • JavaScript

    JavaScript

  • Node.js

    Node.js

Ключевые слова

#pre-signed URL

#S3

#cloud storage

#temporary access

#signed URL

Подпишись на React Developer в телеграм