簡體   English   中英

Stream 來自 azure 媒體服務的授權視頻,帶有 duende 身份服務器

[英]Stream authorized video from azure media service with duende identity server

我有以下星座:

  • 客戶端:Angular + ngx videogular(我可以切換到azure媒體播放器)
  • 服務器:.Net 6 + duende Identity Server 用於用戶認證和授權(Identity server 4)

客戶端應用程序和服務器在 azure 中發布為 static 和服務應用程序。

目標是將 stream 大型視頻(視頻點播)與 azure 媒體服務提供給某些經過身份驗證和授權的用戶。

示例:用戶 1 可以觀看視頻 A 和 B,用戶 2 只能觀看視頻 A。

我已經按照 Microsoft 頁面中的描述設置了媒體服務 v3,我能夠從 azure 媒體服務中獲取 stream 資產(例如作為 HLS 源:

客戶:

        <video #videoElement #vgHls="vgHls" [vgHls]="hlsSource" [vgMedia]="$any(media)" #media [id]="videoId"
            type="video/mp4" [autoplay]="false" preload="auto" crossorigin>
        </video>

服務器:

                    var configWrapper = new ConfigWrapper(configuration);
                    ServiceClientCredentials credentials;
                    credentials = await GetCredentialsInteractiveAuthAsync(configWrapper);
                    
                    var client = new AzureMediaServicesClient(configWrapper.ArmEndpoint, credentials)
                    {
                        SubscriptionId = configWrapper.SubscriptionId,
                    };
                    var asset = await client.Assets.GetAsync(configWrapper.ResourceGroup, configWrapper.AccountName, "assetName");
                    var streamingLocators = await client.Assets.ListStreamingLocatorsAsync(configWrapper.ResourceGroup, configWrapper.AccountName, "assetName");
                    var locator = streamingLocators.StreamingLocators.FirstOrDefault();
                    IList<string> urls = await GetStreamingUrlsAsync(client, configWrapper.ResourceGroup, configWrapper.AccountName, locator.Name);
                    // return hlsUrl... It works for all users? (not only for authorized user?)

現在我不想在客戶端視頻播放器中輸入 hls 或 dash 源,而是在我的 api 服務器中控制訪問權限。

如何僅為經過身份驗證和授權的用戶在 rest api 中為 azure 資產創建“hls 源”?

如何只為授權用戶使用令牌來保護視頻/資產?

在上面的示例代碼中,您從 AMS 后端獲得了一個“清晰的”未受保護、未加密的流定位器。

您在上面的代碼中使用的憑據 object - 通過交互式身份驗證 - 只是在實際媒體服務帳戶上分配為所有者或貢獻者角色以進行管理操作(實體上的 CRUD 等)的 Azure 憑據,並且與流媒體無關允許密鑰傳送服務向客戶端提供解密密鑰的定位器加密、密鑰或聲明。 您僅使用 ServiceClientCredentials 來“管理”和創建 AMS 帳戶中的內容。 它與流式驗證沒有任何關系。

對於身份驗證和密鑰傳遞服務,您應該熟悉內容保護下的概念:

內容保護概述: https://learn.microsoft.com/en-us/azure/media-services/latest/drm-content-protection-concept

使用流策略概述: https://learn.microsoft.com/en-us/azure/media-services/latest/stream-streaming-policy-concept

有一個教程介紹了使用 AAD 作為后端的內容保護: https://learn.microsoft.com/en-us/azure/media-services/latest/architecture-azure-ad-content-protection

一些 Typescript 示例展示了如何使用在 ContentKeyPolicyTokenClaim 中配置自定義“Claims”的內容密鑰策略創建流式定位器。

您需要設計和構建您自己的安全令牌服務,以對您的用戶進行身份驗證,並向他們傳遞適當的 JWT 令牌和聲明,這些聲明與您在 AMS 后端配置的特定 Streaming Locator 和 ContentKeyPolicy(帶有聲明)一起使用。 掌握起來有點棘手,但如果您查看上面的一些教程並慢慢瀏覽它們,概念就會融合在一起。 關鍵部分是您指定要使用的 JWT 令牌和聲明。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM