S3:文件的唯一链接?

我对我的项目有几个问题,因为我已经停止并且不知道如何继续。


我创建了一个小型 saas,类似于教育平台。它是关于付费访问视频文件的。


编程语言是 TypeScript:React / NestJS / PostgreSQL / Stripe / AWS S3。


我现在的逻辑如下 - 如果用户付款,我将记录添加到我的数据库中:


user_trainings

id | uuid | user_id | training_id

 1 | d-2a |       1 |           1

我的简化训练基础结构如下所示:


trainings

id | uuid | name | video_file_name_key

 1 | d21x |  foo |      videos/boo.mp4

文件videos/boo.mp4是我文件的密钥,它在存储桶 aws s3 中。


因此,id 为 1 的用户在登录我的应用程序后可以访问培训。现在,我该如何保护这个文件和文件的链接,使用户无法共享它?


我知道我可以启用 CORS,这可能会解决我的问题,但我希望此文件的链接是唯一的。如果可能的话?这个文件能以某种方式得到保护吗?


我怎样才能得到一个文件的链接?前端用户只有密钥。我可以通过我的服务器链接到该文件,但我不知道该怎么做。


哔哔one
浏览 83回答 1
1回答

扬帆大鱼

存储在 Amazon S3 中的对象默认是私有的。对于您的情况,我建议使用Amazon S3 pre-signed URLs,这些 URLs 是有时间限制的 URLs,可以临时访问私有对象。流程将是:用户登录到您的应用程序用户请求访问课程您的应用程序检查他们是否有权访问课程如果是这样,应用程序会生成一个预签名的 URL,该 URL 的有效期为 30 分钟应用程序返回课程链接,或在页面中使用预签名 URL(例如在标签中<video>)当用户单击链接或在浏览器中打开页面时,浏览器会通过预签名 URL 从 S3 请求对象Amazon S3 将验证预签名 URL 上的签名并确认其在有效期内。如果是,它将对象返回给用户。如果有效期已过,则返回预签名URLAccess Denied只需几行代码即可生成预签名 URL,并且不需要调用 AWS。使用预签名 URL 的好处在于您的应用程序可以完全控制谁可以访问该对象,但 Amazon S3 负责向用户提供内容。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript