如何以安全方式(授权和认证)从S3提供HLS流 [英] How to serve HLS streams from S3 in secure way (authorized & authenticated)

查看:158
本文介绍了如何以安全方式(授权和认证)从S3提供HLS流的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问题:

我正在给定文件结构的 S3 中存储许多 HLS 流:

Video1
  ├──hls3
      ├──hlsv3-master.m3u8
      ├──media-1
      ├──media-2
      ├──media-3
      ├──media-4
      ├──media-5
  ├──hls4
      ├──hlsv4-master.m3u8
      ├──media-1
      ├──media-2
      ├──media-3
      ├──media-4
      ├──media-5

在我的用户 API 中,我确切地知道哪个用户有权访问哪些视频内容 但我还需要确保视频链接不可共享且只能访问 拥有权限的用户.

解决方案:

1)对私有的 S3 内容使用签名的/临时的 S3 网址.每当客户想要播放一些特定的视频时, 发送请求到我的 API .如果用户具有权限,则 API 会生成签名的URL 并将其返回给客户端,客户端会将其传递给播放器.

我在这里看到的问题是真实的视频内容存储在 media-* 目录中的许多段文件中 我真的看不到如何保护所有这些文件-我需要分别对每个段文件URL签名吗?

2) S3 内容是私人的.播放器发出的视频流请求通过我的 API 或单独的反向代理. 因此,每当客户决定播放特定视频时, API /反向代理都会收到请求,并进行身份验证和验证.授权 并传递正确的内容(主播放列表文件和段).

在这种情况下,我仍然需要将 S3 内容设为私有,并且只能通过我的 API /反向代理进行访问.这里推荐的方法是什么? 通过令牌进行S3剩余身份验证?

3)使用受保护的密钥进行加密.在这种情况下,所有视频段均已加密并公开可用.密钥也存储在 S3 中 但不公开可用.玩家提出的每个密钥请求都必须经过身份验证和验证.由我的 API /反向代理授权.

这些是我目前脑海中的3个解决方案.不相信所有人.我正在寻找简单且防弹的东西.有什么建议/建议吗?

使用过的技术:

解决方案

我需要分别对每个段文件URL进行签名吗?

如果玩家直接从S3请求,则为是.因此,这可能不是理想的方法.

一个选项是存储桶前面的CloudFront.可以为CloudFront配置一个原始访问身份,该身份允许它对请求进行签名并将其发送到S3,以便它可以代表授权用户获取私有S3对象,并且CloudFront支持两个签名URL(使用与S3不同的算法,有两个重要的区别,我将在下面进行解释)或与已签名的Cookie . CloudFront中已签名的请求和cookie的工作原理非常相似,重要的区别在于,一次cookie可以设置一次,然后浏览器会自动将其用于每个后续请求,而无需对单个URL进行签名. (啊哈)

对于CloudFront中的已签名URL和已签名Cookie,如果您使用自定义策略,您还将获得两个S3很难完成的附加功能:

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆