Безопасный обмен платными медиафайлами с помощью хранилища BLOB-объектов Azure

Я разрабатываю веб-API C # для веб-сайта, на котором я хочу поделиться платными мультимедийными файлами, я сохранил мультимедийные файлы в хранилище BLOB-объектов Azure. В настоящее время, когда кто-то платит за книгу, видео, аудио и хочет получить доступ к этому носителю, я делаю токен SAS для каждого доступа, и я не уверен, что это лучший способ. Может ли кто-нибудь помочь мне и предложить лучший способ для этого? Это решение должно использовать службы Azure.

Если бы я не был достаточно ясным. Пример:

  1. На моем сайте есть видео по цене 5 $.
  2. Пользователь покупает это видео.
  3. Когда он нажимает кнопку воспроизведения видео, я делаю токен SAS для одноразового доступа (срок действия истекает через 5 секунд) и возвращаю URL-адрес для этого видео, а медиаплеер обновляет видео. Если пользователь обновляет веб-страницу, я снова создаю новый токен SAS и возвращаю новый URL-адрес и т. Д.

person Branislav Todorovic    schedule 14.01.2021    source источник
comment
I make SAS token for onetime access(expire in 5 sec) Что делать, если загрузка файла занимает более 5 секунд?   -  person mjwills    schedule 15.01.2021
comment
Я подозреваю, что stackoverflow.com/questions / 55233010 / может быть хорошим местом для начала чтения.   -  person mjwills    schedule 15.01.2021
comment
@mjwills Когда media play начинает воспроизводить видео, мне не нужен токен SAS, пока пользователь не обновит страницу.   -  person Branislav Todorovic    schedule 15.01.2021


Ответы (1)


Это вопрос дизайна, и обратите внимание, что на него нельзя ответить одним ответом, не зная бизнес-требований от начала до конца.

Но я бы сделал здесь предложение. Вы можете использовать User Delegation SAS для этого.

SAS, защищенный учетными данными Azure AD, называется SAS делегирования пользователя. Microsoft рекомендует использовать учетные данные Azure AD, когда это возможно, в качестве наилучшей практики безопасности, а не использовать ключ учетной записи, который может быть легче скомпрометирован. Если в дизайне приложения требуются подписи общего доступа, используйте учетные данные Azure AD для создания SAS делегирования пользователей для обеспечения максимальной безопасности.

Ниже приводится график шагов, которые необходимо выполнить:

  1. Если пользователь совершает транзакцию и платит за видео, назначьте User Delegation SAS на основе его учетных данных. Сохраните это как секрет в своей базе данных для записи вашего пользователя (Опять же, дизайн для этого должен быть разработан на основе обсуждения с архитектором).
  2. Создайте серверное задание, которое отменяет ключи делегирования пользователей, если срок покупки истек, и продление не производится.
person singhh-msft    schedule 15.01.2021
comment
Пользовательское делегирование SAS предназначено для передачи мультимедиа в хранилище больших двоичных объектов. Мне это не нужно. В настоящее время у меня есть имя учетной записи и ключ учетной записи, используя их, я генерирую токен SAS для пользователя. Примерно то, что мне нужно, находится по этой ссылке, но, к сожалению, в Azure нет. Я поддерживаю это. - person Branislav Todorovic; 15.01.2021
comment
Конечно, вы можете использовать SAS, используя имя вашей учетной записи и ключ. Как сказано в «Прекращенном участии», «SAS позволяет вам предоставлять ограниченный по времени доступ с ограниченными разрешениями к ресурсам хранилища. ', в чем проблема такого подхода? Вы можете уточнить? - person singhh-msft; 18.01.2021
comment
Это помогает? - person singhh-msft; 20.01.2021
comment
В конце концов, для каждого доступа к медиа я делаю токен SAS, и это нормально. Я хотел пропустить вызов API каждый раз, когда пользователь хочет получить доступ к мультимедиа. Большое спасибо за вашу помощь. - person Branislav Todorovic; 21.01.2021
comment
Да, как я уже упоминал, вы также можете использовать SAS. - person singhh-msft; 21.01.2021
comment
Да, я использовал это с самого начала, я спросил здесь, просто чтобы узнать, есть ли лучшее решение. - person Branislav Todorovic; 21.01.2021