Backblaze B2 скачать с «предопределенным URL» - PullRequest
0 голосов
/ 27 октября 2018

Ситуация: я запускаю приложение Django в Интернете, где вошедшие в систему пользователи могут также загружать файлы .pdf (непубличные, с конкретными ограничениями, в зависимости от прав пользователя). Наиболее удобный способ сделать это (например, на этапе S3) - использовать предварительно подписанный URL-адрес с ограничением по времени, поскольку он сразу открывается в браузере, плюс серверу приложений не нужно обрабатывать дополнительный трафик.

Проблема: Backblaze B2, очевидно, не предлагает явного метода для создания предопределенных URL-адресов для загрузки непубличных файлов непосредственно в браузере. Создание URL-адреса API и токена авторизации и выборка файла из хранилища объектов происходит на уровне сервера приложений, и этот процесс не предоставляется «обычному» пользователю.

Но, в конце концов, операция API "b2_download_file_by_name" просто использует запрос GET, что означает, что я могу добавить токен авторизации в URL запроса, используя "? Authorization = 123xyz ........". Таким образом, я получаю предварительно назначенный URL, который отлично работает в браузере, чтобы разрешить доступ к определенному непубличному файлу в течение ограниченного времени. (Обратите внимание: загрузка B2 может быть ограничена файлами с определенными префиксами [например, псевдопапками s3], но если указанный «префикс» достаточно длинный, я могу сделать токен аутентификации специфичным для одного файла.)

Вопрос: Как я писал выше, обычно токен авторизации не предоставляется пользователю. Теперь, если я сделаю URL видимым, означает ли это угрозу безопасности? Другими словами, может ли пользователь, у которого есть один или несколько токенов, извлечь общий ключ доступа из токена или токен достаточно хорошо зашифрован, чтобы избежать этого?

1 Ответ

0 голосов
/ 24 января 2019

В соответствии с документацией для вызова b2_download_file_by_name вы можете использовать авторизацию загрузки в URL так, как вы описываете.

Маркер авторизации может быть указан в строке запроса URL, а не передан в заголовке HTTP. Токен авторизации учетной записи, полученный из b2_authorize_account, разрешит доступ ко всем файлам в приватной корзине. Токен авторизации загрузки, полученный из b2_get_download_authorization, разрешит доступ к файлам, имена которых начинаются с префикса имени файла, используемого для генерирования токена авторизации загрузки.

Однако кажется, что время истечения, установленное в вызове b2_get_download_authorization, игнорируется, поэтому конечный URL никогда не истекает, что, конечно, не безопасно. У меня есть запрос в службу поддержки B2 на эту тему, так что я надеюсь найти решение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...