我对我的项目有几个问题,因为我已经停止并且不知道如何继续。我创建了一个小型 saas,类似于教育平台。它是关于付费访问视频文件的。编程语言是 TypeScript:React / NestJS / PostgreSQL / Stripe / AWS S3。我现在的逻辑如下 - 如果用户付款,我将记录添加到我的数据库中:user_trainingsid | uuid | user_id | training_id 1 | d-2a | 1 | 1我的简化训练基础结构如下所示:trainingsid | uuid | name | video_file_name_key 1 | d21x | foo | videos/boo.mp4文件videos/boo.mp4是我文件的密钥,它在存储桶 aws s3 中。因此,id 为 1 的用户在登录我的应用程序后可以访问培训。现在,我该如何保护这个文件和文件的链接,使用户无法共享它?我知道我可以启用 CORS,这可能会解决我的问题,但我希望此文件的链接是唯一的。如果可能的话?这个文件能以某种方式得到保护吗?我怎样才能得到一个文件的链接?前端用户只有密钥。我可以通过我的服务器链接到该文件,但我不知道该怎么做。
1 回答

扬帆大鱼
TA贡献1799条经验 获得超9个赞
存储在 Amazon S3 中的对象默认是私有的。
对于您的情况,我建议使用Amazon S3 pre-signed URLs,这些 URLs 是有时间限制的 URLs,可以临时访问私有对象。
流程将是:
用户登录到您的应用程序
用户请求访问课程
您的应用程序检查他们是否有权访问课程
如果是这样,应用程序会生成一个预签名的 URL,该 URL 的有效期为 30 分钟
应用程序返回课程链接,或在页面中使用预签名 URL(例如在标签中
<video>
)当用户单击链接或在浏览器中打开页面时,浏览器会通过预签名 URL 从 S3 请求对象
Amazon S3 将验证预签名 URL 上的签名并确认其在有效期内。如果是,它将对象返回给用户。
如果有效期已过,则返回预签名URL
Access Denied
只需几行代码即可生成预签名 URL,并且不需要调用 AWS。
使用预签名 URL 的好处在于您的应用程序可以完全控制谁可以访问该对象,但 Amazon S3 负责向用户提供内容。
添加回答
举报
0/150
提交
取消