生成和签名播放令牌 - Amazon Interactive Video Service

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

生成和签名播放令牌

有关使用 JWT 和受支持的库签名令牌的详细信息,请访问 jwt.io。在 jwt.io 界面上,您必须输入私有密钥才能签署令牌。只有当您想验证令牌时才需要公有密钥。

令牌架构

所有 JWT 都有三个字段:标头、有效负载和签名。

  • 标头指定了如下内容:

    • alg 是签名算法。这是 ES384,是一种使用 SHA-384 哈希算法的 ECDSA 签名算法。

    • typ 是令牌类型(即 JWT)。

    { "alg": "ES384", "typ": "JWT" }
  • 有效负载包含特定于 Amazon IVS 的数据:

    • channel-arn 是视频播放请求的参考。

    • access-control-allow-origin 是一个可选字段,可用于将播放限制到指定;即设置为仅可从指定网站查看视频流。例如,您可能想要阻止用户将播放器嵌入到其他网站上。预设情况下,允许在所有源中播放。(请注意,这仅限制浏览器客户端;不会限制来自非浏览器客户端的播放。) 此字段可以包含多个源,以逗号分隔。允许使用通配符域名:每个源的主机名都可以用 * 开头(例如:https://*.amazon.com)。

    • strict-origin-enforcement 是一个可选字段,可用于加强 access-control-allow-origin 字段中指定的源限制。默认情况下,access-control-allow-origin 限制仅适用于多变体播放列表。如果启用 strict-origin-enforcement,服务器将强制要求请求源与所有播放请求(包括多变体播放列表、变体播放列表和片段)的令牌匹配。这意味着所有客户端(包括非浏览器客户端)都必须在每个请求中提供有效的源请求标头。使用 setOrigin 方法在 IVS iOS 和 Android 回放器 SDK 中设置标头。除 iOS Safari 之外,它会在 Web 浏览器中自动设置。对于 iOS Safari,您需要将 crossorigin="anonymous" 添加到视频元素,以确保发送源请求标头。示例:<video crossorigin="anonymous"></video>

    • single-use-uuid 是可选字段,其中包含您在创作令牌时生成的有效的通用唯一标识符(UUID)。如果添加此字段和 UUID 值,则生成的关联令牌在用于获取多变体播放列表和观看流后将失效。一次性身份验证令牌让恶意用户更难在您的私有通道上与其他观众分享流式传输。请注意,使用 single-use-uuid 申请时,exp 申请的最大值为未来 10 分钟。

    • viewer-id 是一个可选字段,其中包含一个用于跟踪和引用授予令牌的查看者的 ID。此字段是必填字段,以便将来能够撤消查看者的查看会话。最大长度为 40 个字符,并且该值必须符合字符串的条件。请勿将此字段用于个人识别信息、机密信息或敏感信息。请注意,使用 viewer-id 时,exp 的最大值为未来 10 分钟。

    • viewer-session-version 是一个可选字段,其中包含与此查看者会话关联的版本。当撤消查看者会话时,此值可用于筛选已撤消的查看者会话。例如,在此处指定 Unix 时间戳将允许撤消在指定时间之前启动的所有会话。该值必须是一个 64 位有符号整数 (Int64)。该字段应与 viewer-id 一起提供(可选);它本身不起任何作用。默认值是 0。

    • exp 是令牌到期时的 Unix UTC 时间戳。这并不代表视频流可以查看的时长。在观众初始化播放时验证令牌,而不是在整个视频流中。将该值作为整数类型值输入。

      请注意,Unix 时间戳是一个数值,表示从 1970-01-01T00:00:00Z UTC 到指定 UTC 日期/时间的秒数(忽略闰秒)。不同的语言以不同的单位测量 Unix 时间戳;例如, JavaScript's 以毫秒为单位Date.now()返回时间。(请参阅 JWT RFC 部分 4.1.4 中的 exp。)

    { "aws:channel-arn": "<channel_arn>", "aws:access-control-allow-origin": "<your-origin>", "aws:strict-origin-enforcement": true, "aws:single-use-uuid": "<UUID>", "aws:viewer-id": "<viewer_id>", "aws:viewer-session-version": "<viewer_session_version>", "exp": <unix timestamp> }
  • 要创建签名,可搭配使用私有密钥和标头 (ES384) 中指定的算法,对已编码的标头和已编码的负载进行签名。

    ECDSASHA384( base64UrlEncode(header) + "." + base64UrlEncode(payload), <private-key> )

说明

  1. 使用 ES384 签名算法以及与其中一个播放密钥资源关联的私有密钥生成令牌签名(请参阅上面的 ECDSASHA384 示例)。

  2. 汇编令牌。

    base64UrlEncode(header) + "." + base64UrlEncode(payload) + "." + base64UrlEncode(signature)
  3. 将签名令牌作为查询参数附加到播放 URL。

    https://b37c565f6d790a14a0e78afaa6808a80.us-west-2.playback.live-video.net/ api/video/v1/aws.ivs.us-west-2.123456789. channel.fbc789c1-2c56-4ce6-a30a-d99275dc4481.m3u8?token=<token>