本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
產生並簽章播放符記
如需有關使用 JWT 以及用於簽章符記的支援程式庫的詳細資訊,請造訪 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 以外的網頁瀏覽器中自動進行該設定。針對 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 日期/時間的秒數 (忽略閏秒)。不同 JavaScript的語言以不同的單位測量 Unix 時間戳; 例如,
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> )
指示
-
使用 ES384 簽章演算法,以及與其中一個播放金鑰資源相關聯的私有金鑰,來產生符記簽章 (請參閱前述
ECDSASHA384
範例)。 -
組合符記。
base64UrlEncode(header) + "." + base64UrlEncode(payload) + "." + base64UrlEncode(signature)
-
將已簽章的符記作為查詢參數附加至播放 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>