動態加密和金鑰傳遞的內容保護
警告
Azure 媒體服務將於 2024 年 6 月 30 日淘汰。 如需詳細資訊,請參閱 AMS淘汰指南。
使用 Azure 媒體服務,從離開電腦到記憶體、處理和傳遞時保護媒體的安全。 使用媒體服務,您就能傳遞利用進階加密標準 (AES-128) 或下列三個主要數位版權管理 (DRM) 系統中任一個所動態加密的即時與隨選內容:Microsoft PlayReady、Google Widevine 和 Apple FairPlay。
FairPlay 串流是 Apple 技術,僅適用於在 iOS 裝置、Apple TV 和 macOS 上的 Safari 上透過 HTTP 即時串流 (HLS) 傳輸的視訊。 媒體服務也提供服務,可傳遞 AES 金鑰和 DRM (PlayReady、Widevine 和 FairPlay) 授權給授權用戶端。 如果內容以 AES 清除金鑰加密並透過 HTTPS 傳送,則內容必須在送達用戶端之後才會變成明文。
在媒體服務 v3 中,內容金鑰會與串流定位器相關聯 (請參閱本例)。 如果使用媒體服務金鑰傳遞服務,您可以讓 Azure 媒體服務為您產生內容金鑰。 如果您使用自己的金鑰傳遞服務,或需要處理高可用性案例,其中需要兩個資料中心具有相同的內容金鑰,則您應自行產生內容金鑰。
播放程式要求串流時,媒體服務便會使用 AES 清除金鑰或 DRM 加密,使用指定的金鑰動態加密您的內容。 為了將串流解密,播放程式會向媒體服務金鑰傳遞服務或您指定的金鑰傳遞服務要求金鑰。 為了決定使用者是否有權取得金鑰,服務會評估您為金鑰指定的內容金鑰原則。
您可以使用 REST API 或媒體服務用戶端程式庫,來設定授權和金鑰的授權和驗證原則。
GovCloud 區域中無法使用 Widevine。
注意
媒體服務將會針對 KeyDelivery、RESTv2、串流端點和即時事件串流來源的所有要求強制執行 TLS 1.2。 具有現有 TLS 1.0 或 1.1 使用量的帳戶將會豁免此強制執行。 如果您想要針對這些媒體服務端點的所有要求強制執行 TLS 1.2,請連絡 AMS 支援。
支援DRM用戶端的瀏覽器
常見的瀏覽器支援下列 DRM 用戶端:
瀏覽器 | 加密 |
---|---|
Chrome | Widevine |
Microsoft Edge、Internet Explorer 11 | PlayReady |
Firefox | Widevine |
Opera | Widevine |
Safari | FairPlay |
控制內容存取
您可以設定內容金鑰原則來控制可存取內容的人員。 媒體服務支援多種方式來授權提出金鑰要求的使用者。 用戶端 (播放器) 必須先符合原則,系統才會將金鑰傳遞給用戶端。 內容金鑰原則可具有開啟或權杖限制。
當您想要向任何人發出授權而不授權時,可能會使用開放限制的內容密鑰原則。 例如,如果您的營收是以廣告為基礎,而不是以訂用帳戶為基礎。
使用權杖限制的內容金鑰原則時,系統只會將內容金鑰傳送給可在授權/金鑰要求中提供有效 JWT 權杖 (JWT) 或簡單 Web 權杖 (SWT) 的用戶端。 此權杖必須由 STS 發出。
使用 Azure AD 作為 STS
您可以使用 Azure AD 作為 STS。 它必須設定為建立以指定密鑰簽署的令牌,併發出您在令牌限制設定中指定的宣告。 媒體服務授權/金鑰傳遞服務會在這兩個條件存在時,將要求的授權或金鑰傳回給用戶端:
- 權杖是有效的。
- 權杖中的宣告符合針對授權或金鑰所設定的宣告。
設定權杖限制的原則時,您必須指定主要驗證金鑰、簽發者和對象參數。 主要驗證金鑰包含簽署權杖用的金鑰。 簽發者為發行權杖的 STS。 有時稱為 範圍的物件描述令牌的意圖,或令牌授權存取的資源。 媒體服務授權/金鑰傳遞服務會驗證令牌中的值是否符合範本中的值。
權杖重送防護
令牌重新執行防護功能可讓您設定相同令牌可用來要求密鑰或授權的次數限制。 您可以在令牌中新增類型的 urn:microsoft:azure:mediaservices:maxuses
宣告,其中 值是令牌可用來取得授權或密鑰的次數。 使用相同權杖執行金鑰傳遞的所有後續要求都會傳回未獲授權的回應。
考量事項
- 您必須能夠控制令牌產生。 宣告必須放在權杖本身。
- 使用這項功能時,權杖到期時間與收到要求的時間相差超過一小時的要求會遭到拒絕,並傳回未獲授權的回應。
- 權杖的簽章為其獨一無二的識別方式。 對承載的任何變更 (例如,更新到期時間或宣告) 都會改變權杖的簽章,且將被視為金鑰傳遞之前未遇到的新權杖。
- 如果令牌超過值,
maxuses
播放就會失敗。 - 它可用於所有現有的受保護內容, (只有發行的令牌需要變更) 。
- 它適用於 JWT 和 SWT。
使用自訂 STS
您可以選擇使用自訂 STS 來提供權杖。 原因包括:
您的識別提供者 (IDP) 不支援 STS。
您可能需要更有彈性或更緊密的控制,才能將 STS 與您的訂閱者計費系統整合。
例如,OTT 服務業者可能會提供多個訂閱者套件,例如高階、基本和運動。 業者可能需要讓權杖中的宣告與訂閱者套件相符,如此一來,只有正確套件中的內容可供使用。 在此情況下,自訂 STS 提供所需的彈性和控制。
若要在令牌中包含自定義宣告,以在不同的 ContentKeyPolicyOptions 之間選取不同的 DRM 授權參數,例如訂用帳戶授權與租用授權。
要包含宣告,以表示權杖授與其存取權的金鑰所擁有的內容金鑰識別碼。
當您使用自訂的 STS 時,必須進行兩項變更:
- 當您設定資產的授權傳遞服務時,您必須指定自定義 STS 用來驗證的安全性密鑰,而不是 Azure AD 中的目前金鑰。
- 產生 JTW 權杖時,會指定安全性金鑰,而不是 Azure AD 中目前 x509 憑證的私密金鑰。
有兩種類型的安全性金鑰:
- 對稱金鑰:會使用相同的金鑰來產生及驗證 JWT。
- 非對稱金鑰:搭配使用 x509 憑證中的私密-公開金鑰組,私密金鑰用來加密/產生 JWT,公開金鑰則用來驗證權杖。
注意
如果您使用 .NET Framework/C# 作為開發平台,用於非對稱安全性金鑰的 x509 憑證之金鑰長度必須至少為 2048。 此金鑰長度是 .NET Framework 中 System.IdentityModel.Tokens.X509AsymmetricSecurityKey 類別的需求。 否則,會擲回下列例外狀況:IDX10630:用於簽署的 'System.IdentityModel.Tokens.X509AsymmetricSecurityKey' 不能小於 '2048' 位元。
使用媒體服務以外的授權/金鑰傳遞服務
如果您想要使用不同的授權/金鑰傳遞服務,您可以編輯金鑰原則範本。
操作說明、教學課程和範例
.Net Digital Rights Management 範例 示範如何使用 .NET 來實作具有媒體服務 v3 的多 DRM 系統。
Node.JS 和 Python 提供額外的內容保護範例:
Node.JS | Python | Description |
---|---|---|
Node.JS 使用 PlayReady 和 Widevine DRM 上傳和串流 HLS 和 DASH | Python 上傳和串流 HLS 和 DASH 搭配 PlayReady 和 Widevine DRM | 示範如何使用 Widevine 和 PlayReady DRM 進行編碼和串流 |
Node.JS 基本 Playready DRM 內容保護和串流 | Python Basic Playready DRM 內容保護和串流 | 示範如何使用 PlayReady DRM 編碼和串流 |
Node.JS 基本WidevineDRM內容保護和串流 | Python 基本 Widevine DRM 內容保護和串流 | 示範如何使用WidevineDRM編碼和串流 |
取得說明及支援
您可以連絡媒體服務並詢問問題,或依照下列其中一種方法追蹤我們的更新:
- 問與答
-
Stack Overflow。 使用
azure-media-services
標記問題。 - @MSFTAzureMedia 或使用 @AzureSupport 來要求支援。
- 透過 Azure 入口網站 開啟支援票證。