c# - 使用 Azure Blob 存储对付费媒体文件进行安全媒体共享
问题描述
我正在为要共享付费媒体文件的网站开发 C# Web API,我将媒体文件存储到 Azure blob 存储。目前,当有人为某些书籍、视频、音频和他/她想要访问该媒体付费时,我为每次访问制作 SAS 令牌,但我不确定这是最好的方式。有人可以帮助我并为此提出一些更好的方法吗?该解决方案需要使用 Azure 服务。
如果我不够清楚。例子:
- 在我的网站上有一些价格为 5 美元的视频。
- 用户购买该视频。
- 当她/他点击播放视频时,我制作 SAS 令牌以进行一次性访问(5 秒后过期)并返回该视频和媒体播放器追溯视频的 URL。如果用户刷新网页,我会再次创建新的 SAS 令牌并返回新的 URL 等...
解决方案
这是一个设计问题,请注意,在不了解端到端业务需求的情况下,无法一次性回答。
但是,我会在这里提出一个建议。您可以为此使用用户委派 SAS。
使用 Azure AD 凭据保护的 SAS 称为用户委托 SAS。Microsoft 建议您尽可能使用 Azure AD 凭据作为安全最佳实践,而不是使用帐户密钥,因为后者更容易受到破坏。当您的应用程序设计需要共享访问签名时,请使用 Azure AD 凭据创建用户委派 SAS 以获得更高的安全性。
以下是要遵循的步骤的时间表:
- 如果用户进行交易并支付视频费用,则根据他的凭据分配用户委派 SAS 。将此作为机密保存在您的数据库中,针对您的用户记录(同样,应根据与架构师的讨论来完成此设计)。
- 如果购买的时间段已过期且未完成续订,则创建一个撤销用户授权密钥的后端作业。
推荐阅读
- php - add_action 到特定页面类型或 WordPress 上的帖子 ID
- spring-boot - API(Spring Boot - SwaggerHub 生成)结果为 404,尽管映射正确
- python - nlsModel(formula, mf, start, wts) 中的错误:初始参数估计处的奇异梯度矩阵
- javascript - axios 获取参数
- c++ - 如何在 gcc 中禁用 fma3 指令
- node.js - ReactJS(使用 apollo-client)未设置从 ExpressJS 接收的 cookie(使用 apollo-server-express)
- python - 圆形图像作为按钮 PyQt5
- apache-spark - GCP 上的数据湖、图层和 ETL 处理
- r - 如何将 YearWeek 格式转换为日期?
- javascript - 无法在 Google 表单中使用地理位置显示地图