Клиенты облачного хранилища получают доступ к лучшим практикам - PullRequest
2 голосов
/ 17 октября 2019

Допустим, у меня есть сценарий использования, когда пользователи могут покупать mp3-файлы внутри приложения. Объекты хранятся в облачном хранилище GCP. Как лучше всего доставлять эти объекты только тем пользователям, которые приобрели файлы?

После изучения темы я предложил три решения:

  1. Клиент вызывает службу REST (например, работающую в App Engine). Эта служба загружает файлы из облачного хранилища и затем отправляет их обратно клиенту.
  2. Вместо отправки файлов через вызов REST я мог бы отправить клиенту URL-адрес загрузки (из облачного хранилища). Это было бы более экономически эффективным, однако для меня это звучит как проблема безопасности, поскольку любой, кто просто следит за своей сетью, может перехватить URL.
  3. Создание (ограниченного по времени) URL-адреса со знаком, чтобы пользователь мог загрузить

Очевидно, что сначала должна произойти проверка прав доступа, например, база данных, которая содержит, если пользователь X купил mp3 Y.

Эта проблема также может быть применена к хранилищу BLOB-объектов Azure или AWS S3. ..

1 Ответ

0 голосов
/ 17 октября 2019

В вашем случае использования у вас есть константа:

  • Вам необходим бэкэнд для аутентификации пользователя (например, Аутентификация, выполняемая с Cloud Identity Platform и размещенная на App Engine или Работа в облаке
  • Вам необходимо проверить список купленных MP3-файлов (например, хранящихся в Firestore )
  • И затем вам нужно разрешить ему загрузить файл. В этом последнем пункте я рекомендую вам сгенерировать signatureURL . URL для загрузки существует только в области Firebase (возможно, ваш проектэто проект Firebase?), но это то же самое, что signerURL. Наконец, я не рекомендую вам предложение № 1. Это будет работать, но в случае длительной загрузки (из-за плохой сети) соединение будет прервано через 60секунд. И это будет держать ваш AppEngine напрасно (и вы будете платить за это ...).
...