Crittografia dinamica: configurare i criteri di autorizzazione di una chiave simmetricaDynamic encryption: Configure a content key authorization policy

PanoramicaOverview

Servizi multimediali di Azure consente di distribuire flussi MPEG-DASH, Smooth Streaming e HTTP Live Streaming, ovvero HLS, protetti con Advanced Encryption Standard (AES) con chiavi di crittografia a 128 bit o PlayReady Digital Rights Management (DRM).You can use Azure Media Services to deliver MPEG-DASH, Smooth Streaming, and HTTP Live Streaming (HLS) streams protected with the Advanced Encryption Standard (AES) by using 128-bit encryption keys or PlayReady digital rights management (DRM). Servizi multimediali consente anche di recapitare flussi DASH crittografati con Widevine DRM.With Media Services, you also can deliver DASH streams encrypted with Widevine DRM. Sia per PlayReady che per Widevine la crittografia avviene in base alla specifica di crittografia comune (ISO/IEC 23001-7 CENC).Both PlayReady and Widevine are encrypted per the common encryption (ISO/IEC 23001-7 CENC) specification.

Servizi multimediali offre anche un servizio di distribuzione di chiavi/licenze dal quale i client possono ottenere le chiavi AES o le licenze PlayReady/Widevine per riprodurre contenuti crittografati.Media Services also provides a key/license delivery service from which clients can obtain AES keys or PlayReady/Widevine licenses to play the encrypted content.

Per consentire a Servizi multimediali di crittografare un asset, è necessario associare una chiave di crittografia (CommonEncryption o EnvelopeEncryption) all'asset.If you want Media Services to encrypt an asset, you need to associate an encryption key (CommonEncryption or EnvelopeEncryption) with the asset. Per altre informazioni, vedere Create content keys with .NET (Creare chiavi simmetriche con .NET).For more information, see Create ContentKeys with .NET. È necessario anche configurare i criteri di autorizzazione per la chiave, come descritto in questo articolo.You also need to configure authorization policies for the key (as described in this article).

Quando un lettore richiede un flusso, Servizi multimediali usa la chiave specificata per crittografare dinamicamente i contenuti mediante la crittografia DRM o AES.When a stream is requested by a player, Media Services uses the specified key to dynamically encrypt your content by using AES or DRM encryption. Per decrittografare il flusso, il lettore richiede la chiave dal servizio di distribuzione delle chiavi.To decrypt the stream, the player requests the key from the key delivery service. Per determinare se l'utente è autorizzato a ottenere la chiave, il servizio valuta i criteri di autorizzazione specificati per la chiave.To determine whether the user is authorized to get the key, the service evaluates the authorization policies that you specified for the key.

Servizi multimediali supporta più modalità di autenticazione degli utenti che eseguono richieste di chiavi.Media Services supports multiple ways of authenticating users who make key requests. I criteri di autorizzazione della chiave simmetrica possono avere una o più limitazioni di autorizzazione.The content key authorization policy can have one or more authorization restrictions. Le opzioni disponibili sono restrizione aperta o del token.The options are open or token restriction. I criteri con restrizione del token richiedono la presenza di un token rilasciato da un servizio token di sicurezza.The token-restricted policy must be accompanied by a token issued by a security token service (STS). Servizi multimediali supporta i token nei formati token Web semplice, ovvero SWT e token JSON Web, ovvero JWT.Media Services supports tokens in the simple web token (SWT) format and the JSON Web Token (JWT) format.

Servizi multimediali non offre un servizio token di sicurezza.Media Services doesn't provide STS. È possibile creare un servizio token di sicurezza personalizzato o usare il Servizio di controllo di accesso di Azure per il rilascio di token.You can create a custom STS or use Azure Access Control Service to issue tokens. Il servizio token di sicurezza deve essere configurato in modo da creare un token firmato con la chiave specificata e rilasciare le attestazioni specificate nella configurazione della restrizione Token, come descritto in questo articolo.The STS must be configured to create a token signed with the specified key and issue claims that you specified in the token restriction configuration (as described in this article). Se il token è valido e le attestazioni nel token corrispondono a quelle configurate per la chiave simmetrica, il servizio di distribuzione delle chiavi di Servizi multimediali restituisce la chiave di crittografia al client.If the token is valid and the claims in the token match those configured for the content key, the Media Services key delivery service returns the encryption key to the client.

Per altre informazioni, vedere gli articoli seguenti:For more information, see the following articles:

Considerazioni applicabiliSome considerations apply

  • Quando viene creato l'account di Servizi multimediali, viene aggiunto all'account un endpoint di streaming predefinito con stato "Arrestato".When your Media Services account is created, a default streaming endpoint is added to your account in the "Stopped" state. Per avviare lo streaming dei contenuti e sfruttare i vantaggi della creazione dinamica dei pacchetti e della crittografia dinamica, lo stato dell'endpoint di streaming deve essere "In esecuzione".To start streaming your content and take advantage of dynamic packaging and dynamic encryption, your streaming endpoint must be in the "Running" state.
  • L'asset deve contenere un set di file MP4 o Smooth Streaming a velocità in bit adattiva.Your asset must contain a set of adaptive bitrate MP4s or adaptive bitrate Smooth Streaming files. Per altre informazioni, vedere l'articolo relativo alla codifica di un asset.For more information, see Encode an asset.
  • Caricare e codificare gli asset mediante l'opzione AssetCreationOptions.StorageEncrypted.Upload and encode your assets by using the AssetCreationOptions.StorageEncrypted option.
  • Se si prevede di avere più chiavi simmetriche che richiedono una stessa configurazione di criteri, è consigliabile creare un singolo criterio di autorizzazione e applicarlo a più chiavi simmetriche.If you plan to have multiple content keys that require the same policy configuration, we recommend that you create a single authorization policy and reuse it with multiple content keys.
  • Il servizio di distribuzione delle chiavi memorizza nella cache l'oggetto ContentKeyAuthorizationPolicy e gli oggetti correlati (opzioni e restrizioni) per 15 minuti.The key delivery service caches ContentKeyAuthorizationPolicy and its related objects (policy options and restrictions) for 15 minutes. È possibile creare ContentKeyAuthorizationPolicy e specificare l'uso di una restrizione del token, testarla e quindi eseguire l'aggiornamento alla restrizione aperta.You can create ContentKeyAuthorizationPolicy and specify to use a token restriction, test it, and then update the policy to the open restriction. Per aggiornare i criteri alla restrizione aperta, il processo richiede circa 15 minuti.This process takes roughly 15 minutes before the policy switches to the open version of the policy.
  • Se si aggiungono o si aggiornano i criteri di distribuzione degli asset, è necessario eliminare qualsiasi localizzatore esistente e crearne uno nuovo.If you add or update your asset's delivery policy, you must delete any existing locator and create a new locator.
  • Attualmente non è possibile crittografare i download progressivi.Currently, you can't encrypt progressive downloads.
  • Un endpoint di streaming di Servizi multimediali imposta il valore dell'intestazione CORS "Access-Control-Allow-Origin" nella risposta preliminare come carattere jolly "*".A Media Services streaming endpoint sets the value of the CORS 'Access-Control-Allow-Origin' header in preflight response as the wildcard '*'. Questo valore funziona bene con la maggior parte dei lettori, tra cui Azure Media Player, Roku, JW Player e altri.This value works well with most players, including Azure Media Player, Roku and JWPlayer, and others. Tuttavia, alcuni lettori che usano dash.js non funzionano perché, se la modalità delle credenziali è impostata su "include", XMLHttpRequest in dash.js non consente l'uso del carattere jolly "*" come valore di "Access-Control-Allow-Origin".However, some players that use dashjs don't work because, with the credentials mode set to "include", XMLHttpRequest in their dashjs doesn't allow the wildcard "*" as the value of 'Access-Control-Allow-Origin'. Come soluzione alternativa a questa limitazione in dash.js, se si ospita il client di un singolo dominio, Servizi multimediali può specificare tale dominio nell'intestazione della risposta preliminare.As a workaround to this limitation in dashjs, if you host your client from a single domain, Media Services can specify that domain in the preflight response header. Per assistenza, aprire un ticket di supporto tramite il portale di Azure.For assistance, open a support ticket through the Azure portal.

Crittografia dinamica AES-128AES-128 dynamic encryption

Restrizione OpenOpen restriction

Se si applica una restrizione open, il sistema distribuisce la chiave a chiunque ne faccia richiesta.Open restriction means the system delivers the key to anyone who makes a key request. Questa restrizione può essere utile a scopo di test.This restriction might be useful for testing purposes.

L'esempio seguente crea un criterio Open Authorization e lo aggiunge alla chiave simmetrica:The following example creates an open authorization policy and adds it to the content key:

    static public void AddOpenAuthorizationPolicy(IContentKey contentKey)
    {
        // Create ContentKeyAuthorizationPolicy with Open restrictions
        // and create authorization policy
        IContentKeyAuthorizationPolicy policy = _context.
        ContentKeyAuthorizationPolicies.
        CreateAsync("Open Authorization Policy").Result;

        List<ContentKeyAuthorizationPolicyRestriction> restrictions =
            new List<ContentKeyAuthorizationPolicyRestriction>();

        ContentKeyAuthorizationPolicyRestriction restriction =
            new ContentKeyAuthorizationPolicyRestriction
            {
                Name = "HLS Open Authorization Policy",
                KeyRestrictionType = (int)ContentKeyRestrictionType.Open,
                Requirements = null // no requirements needed for HLS
            };

        restrictions.Add(restriction);

        IContentKeyAuthorizationPolicyOption policyOption =
            _context.ContentKeyAuthorizationPolicyOptions.Create(
            "policy", 
            ContentKeyDeliveryType.BaselineHttp, 
            restrictions, 
            "");

        policy.Options.Add(policyOption);

        // Add ContentKeyAutorizationPolicy to ContentKey
        contentKey.AuthorizationPolicyId = policy.Id;
        IContentKey updatedKey = contentKey.UpdateAsync().Result;
        Console.WriteLine("Adding Key to Asset: Key ID is " + updatedKey.Id);
    }

Restrizione TokenToken restriction

Questa sezione descrive come creare un criterio di autorizzazione per una chiave simmetrica e associarlo a tale chiave.This section describes how to create a content key authorization policy and associate it with the content key. I criteri di autorizzazione definiscono i requisiti di autorizzazione che devono essere soddisfatti per determinare se l'utente è autorizzato a ricevere la chiave.The authorization policy describes what authorization requirements must be met to determine if the user is authorized to receive the key. Ad esempio, l'elenco di chiavi di verifica contiene la chiave usata per firmare il token?For example, does the verification key list contain the key that the token was signed with?

Per configurare l'opzione di restrizione del token, è necessario usare un file XML per descrivere i requisiti di autorizzazione del token.To configure the token restriction option, you need to use an XML to describe the token's authorization requirements. Il file XML di configurazione della restrizione Token deve essere conforme allo schema XML seguente:The token restriction configuration XML must conform to the following XML schema:

#### Token restriction schema
    <?xml version="1.0" encoding="utf-8"?>
    <xs:schema xmlns:tns="http://schemas.microsoft.com/Azure/MediaServices/KeyDelivery/TokenRestrictionTemplate/v1" elementFormDefault="qualified" targetNamespace="http://schemas.microsoft.com/Azure/MediaServices/KeyDelivery/TokenRestrictionTemplate/v1" xmlns:xs="http://www.w3.org/2001/XMLSchema">
      <xs:complexType name="TokenClaim">
        <xs:sequence>
          <xs:element name="ClaimType" nillable="true" type="xs:string" />
          <xs:element minOccurs="0" name="ClaimValue" nillable="true" type="xs:string" />
        </xs:sequence>
      </xs:complexType>
      <xs:element name="TokenClaim" nillable="true" type="tns:TokenClaim" />
      <xs:complexType name="TokenRestrictionTemplate">
        <xs:sequence>
          <xs:element minOccurs="0" name="AlternateVerificationKeys" nillable="true" type="tns:ArrayOfTokenVerificationKey" />
          <xs:element name="Audience" nillable="true" type="xs:anyURI" />
          <xs:element name="Issuer" nillable="true" type="xs:anyURI" />
          <xs:element name="PrimaryVerificationKey" nillable="true" type="tns:TokenVerificationKey" />
          <xs:element minOccurs="0" name="RequiredClaims" nillable="true" type="tns:ArrayOfTokenClaim" />
        </xs:sequence>
      </xs:complexType>
      <xs:element name="TokenRestrictionTemplate" nillable="true" type="tns:TokenRestrictionTemplate" />
      <xs:complexType name="ArrayOfTokenVerificationKey">
        <xs:sequence>
          <xs:element minOccurs="0" maxOccurs="unbounded" name="TokenVerificationKey" nillable="true" type="tns:TokenVerificationKey" />
        </xs:sequence>
      </xs:complexType>
      <xs:element name="ArrayOfTokenVerificationKey" nillable="true" type="tns:ArrayOfTokenVerificationKey" />
      <xs:complexType name="TokenVerificationKey">
        <xs:sequence />
      </xs:complexType>
      <xs:element name="TokenVerificationKey" nillable="true" type="tns:TokenVerificationKey" />
      <xs:complexType name="ArrayOfTokenClaim">
        <xs:sequence>
          <xs:element minOccurs="0" maxOccurs="unbounded" name="TokenClaim" nillable="true" type="tns:TokenClaim" />
        </xs:sequence>
      </xs:complexType>
      <xs:element name="ArrayOfTokenClaim" nillable="true" type="tns:ArrayOfTokenClaim" />
      <xs:complexType name="SymmetricVerificationKey">
        <xs:complexContent mixed="false">
          <xs:extension base="tns:TokenVerificationKey">
            <xs:sequence>
              <xs:element name="KeyValue" nillable="true" type="xs:base64Binary" />
            </xs:sequence>
          </xs:extension>
        </xs:complexContent>
      </xs:complexType>
      <xs:element name="SymmetricVerificationKey" nillable="true" type="tns:SymmetricVerificationKey" />
    </xs:schema>

Quando si configurano i criteri di restrizione del token, è necessario specificare i parametri primary verification key, issuer e audience.When you configure the token-restricted policy, you must specify the primary verification key, issuer, and audience parameters. Il parametro primary verification key include la chiave usata per firmare il token.The primary verification key contains the key that the token was signed with. Il parametro issuer è il servizio token di sicurezza che rilascia il token.The issuer is the STS that issues the token. Il parametro audience (talvolta denominato scope) descrive l'ambito del token o la risorsa a cui il token autorizza l'accesso.The audience (sometimes called scope) describes the intent of the token or the resource the token authorizes access to. Il servizio di distribuzione delle chiavi di Servizi multimediali verifica che i valori nel token corrispondano ai valori nel modello.The Media Services key delivery service validates that these values in the token match the values in the template.

Se si usa l'SDK di Servizi multimediali per .NET, è possibile usare la classe TokenRestrictionTemplate per generare il token delle limitazioni.When you use the Media Services SDK for .NET, you can use the TokenRestrictionTemplate class to generate the restriction token. Il seguente esempio crea un criterio di autorizzazione con una restrizione Token.The following example creates an authorization policy with a token restriction. In questo esempio il client deve presentare un token contenente una chiave di firma, ovvero VerificationKey, un'autorità emittente del token e le attestazioni necessarie.In this example, the client must present a token that contains a signing key (VerificationKey), a token issuer, and required claims.

    public static string AddTokenRestrictedAuthorizationPolicy(IContentKey contentKey)
    {
        string tokenTemplateString = GenerateTokenRequirements();

        IContentKeyAuthorizationPolicy policy = _context.
                                ContentKeyAuthorizationPolicies.
                                CreateAsync("HLS token restricted authorization policy").Result;

        List<ContentKeyAuthorizationPolicyRestriction> restrictions =
                new List<ContentKeyAuthorizationPolicyRestriction>();

        ContentKeyAuthorizationPolicyRestriction restriction =
                new ContentKeyAuthorizationPolicyRestriction
                {
                    Name = "Token Authorization Policy",
                    KeyRestrictionType = (int)ContentKeyRestrictionType.TokenRestricted,
                    Requirements = tokenTemplateString
                };

        restrictions.Add(restriction);

        //You could have multiple options 
        IContentKeyAuthorizationPolicyOption policyOption =
            _context.ContentKeyAuthorizationPolicyOptions.Create(
                "Token option for HLS",
                ContentKeyDeliveryType.BaselineHttp,
                restrictions,
                null  // no key delivery data is needed for HLS
                );

        policy.Options.Add(policyOption);

        // Add ContentKeyAutorizationPolicy to ContentKey
        contentKey.AuthorizationPolicyId = policy.Id;
        IContentKey updatedKey = contentKey.UpdateAsync().Result;
        Console.WriteLine("Adding Key to Asset: Key ID is " + updatedKey.Id);

        return tokenTemplateString;
    }

    static private string GenerateTokenRequirements()
    {
        TokenRestrictionTemplate template = new TokenRestrictionTemplate(TokenType.SWT);

        template.PrimaryVerificationKey = new SymmetricVerificationKey();
        template.AlternateVerificationKeys.Add(new SymmetricVerificationKey());
            template.Audience = _sampleAudience.ToString();
            template.Issuer = _sampleIssuer.ToString();

        template.RequiredClaims.Add(TokenClaim.ContentKeyIdentifierClaim);

        return TokenRestrictionTemplateSerializer.Serialize(template);
    }

Token di testTest token

Per ottenere un token di test basato sulle limitazioni del token usate per i criteri di autorizzazione della chiave, seguire questa procedura:To get a test token based on the token restriction that was used for the key authorization policy, do the following:

    // Deserializes a string containing an Xml representation of a TokenRestrictionTemplate
    // back into a TokenRestrictionTemplate class instance.
    TokenRestrictionTemplate tokenTemplate =
        TokenRestrictionTemplateSerializer.Deserialize(tokenTemplateString);

    // Generate a test token based on the the data in the given TokenRestrictionTemplate.
    // Note, you need to pass the key id Guid because we specified 
    // TokenClaim.ContentKeyIdentifierClaim in during the creation of TokenRestrictionTemplate.
    Guid rawkey = EncryptionUtils.GetKeyIdAsGuid(key.Id);

    //The GenerateTestToken method returns the token without the word “Bearer” in front
    //so you have to add it in front of the token string. 
    string testToken = TokenRestrictionTemplateSerializer.GenerateTestToken(tokenTemplate, null, rawkey);
    Console.WriteLine("The authorization token is:\nBearer {0}", testToken);
    Console.WriteLine();

Crittografia dinamica PlayReadyPlayReady dynamic encryption

È possibile usare Servizi multimediali per configurare i diritti e le restrizioni che il runtime di PlayReady DRM deve applicare quando l'utente prova a riprodurre contenuti protetti.You can use Media Services to configure the rights and restrictions that you want the PlayReady DRM runtime to enforce when a user tries to play back protected content.

Quando si protegge il contenuto con PlayReady, è necessario includere nei criteri di autorizzazione una stringa XML che definisce il modello di licenza PlayReady.When you protect your content with PlayReady, one of the things you need to specify in your authorization policy is an XML string that defines the PlayReady license template. Per definire più facilmente il modello di licenza PlayReady, è possibile usare le classi PlayReadyLicenseResponseTemplate e PlayReadyLicenseTemplate nell'SDK di Servizi multimediali per .NET.In the Media Services SDK for .NET, the PlayReadyLicenseResponseTemplate and PlayReadyLicenseTemplate classes help you define the PlayReady license template.

Per informazioni su come crittografare i contenuti con PlayReady e Widevine, vedere Usare la crittografia comune dinamica Widevine e/o PlayReady.To learn how to encrypt your content with PlayReady and Widevine, see Use PlayReady and/or Widevine dynamic common encryption.

Restrizione OpenOpen restriction

Se si applica una restrizione open, il sistema distribuisce la chiave a chiunque ne faccia richiesta.Open restriction means the system delivers the key to anyone who makes a key request. Questa restrizione può essere utile a scopo di test.This restriction might be useful for testing purposes.

L'esempio seguente crea un criterio Open Authorization e lo aggiunge alla chiave simmetrica:The following example creates an open authorization policy and adds it to the content key:

    static public void AddOpenAuthorizationPolicy(IContentKey contentKey)
    {

        // Create ContentKeyAuthorizationPolicy with Open restrictions 
        // and create authorization policy          

        List<ContentKeyAuthorizationPolicyRestriction> restrictions = new List<ContentKeyAuthorizationPolicyRestriction>
        {
            new ContentKeyAuthorizationPolicyRestriction 
            { 
                Name = "Open", 
                KeyRestrictionType = (int)ContentKeyRestrictionType.Open, 
                Requirements = null
            }
        };

        // Configure PlayReady license template.
        string newLicenseTemplate = ConfigurePlayReadyLicenseTemplate();

        IContentKeyAuthorizationPolicyOption policyOption =
            _context.ContentKeyAuthorizationPolicyOptions.Create("",
                ContentKeyDeliveryType.PlayReadyLicense,
                    restrictions, newLicenseTemplate);

        IContentKeyAuthorizationPolicy contentKeyAuthorizationPolicy = _context.
                    ContentKeyAuthorizationPolicies.
                    CreateAsync("Deliver Common Content Key with no restrictions").
                    Result;


        contentKeyAuthorizationPolicy.Options.Add(policyOption);

        // Associate the content key authorization policy with the content key.
        contentKey.AuthorizationPolicyId = contentKeyAuthorizationPolicy.Id;
        contentKey = contentKey.UpdateAsync().Result;
    }

Restrizione TokenToken restriction

Per configurare l'opzione di restrizione del token, è necessario usare un file XML per descrivere i requisiti di autorizzazione del token.To configure the token restriction option, you need to use an XML to describe the token's authorization requirements. Il file XML di configurazione delle limitazioni del token deve essere conforme all'XML schema illustrato nella sezione "Schema di limitazioni Token".The token restriction configuration XML must conform to the XML schema shown in the "Token restriction schema" section.

    public static string AddTokenRestrictedAuthorizationPolicy(IContentKey contentKey)
    {
        string tokenTemplateString = GenerateTokenRequirements();

        IContentKeyAuthorizationPolicy policy = _context.
                                ContentKeyAuthorizationPolicies.
                                CreateAsync("HLS token restricted authorization policy").Result;

        List<ContentKeyAuthorizationPolicyRestriction> restrictions = new List<ContentKeyAuthorizationPolicyRestriction>
        {
            new ContentKeyAuthorizationPolicyRestriction 
            { 
                Name = "Token Authorization Policy", 
                KeyRestrictionType = (int)ContentKeyRestrictionType.TokenRestricted,
                Requirements = tokenTemplateString, 
            }
        };

        // Configure PlayReady license template.
        string newLicenseTemplate = ConfigurePlayReadyLicenseTemplate();

        IContentKeyAuthorizationPolicyOption policyOption =
            _context.ContentKeyAuthorizationPolicyOptions.Create("Token option",
                ContentKeyDeliveryType.PlayReadyLicense,
                    restrictions, newLicenseTemplate);

        IContentKeyAuthorizationPolicy contentKeyAuthorizationPolicy = _context.
                    ContentKeyAuthorizationPolicies.
                    CreateAsync("Deliver Common Content Key with no restrictions").
                    Result;

        policy.Options.Add(policyOption);

        // Add ContentKeyAutorizationPolicy to ContentKey
        contentKeyAuthorizationPolicy.Options.Add(policyOption);

        // Associate the content key authorization policy with the content key
        contentKey.AuthorizationPolicyId = contentKeyAuthorizationPolicy.Id;
        contentKey = contentKey.UpdateAsync().Result;

        return tokenTemplateString;
    }

    static private string GenerateTokenRequirements()
    {

        TokenRestrictionTemplate template = new TokenRestrictionTemplate(TokenType.SWT);

        template.PrimaryVerificationKey = new SymmetricVerificationKey();
        template.AlternateVerificationKeys.Add(new SymmetricVerificationKey());
            template.Audience = _sampleAudience.ToString();
            template.Issuer = _sampleIssuer.ToString();


        template.RequiredClaims.Add(TokenClaim.ContentKeyIdentifierClaim);

        return TokenRestrictionTemplateSerializer.Serialize(template);
    } 

    static private string ConfigurePlayReadyLicenseTemplate()
    {
        // The following code configures PlayReady License Template using .NET classes
        // and returns the XML string.

        //The PlayReadyLicenseResponseTemplate class represents the template for the response sent back to the end user. 
        //It contains a field for a custom data string between the license server and the application 
        //(may be useful for custom app logic) as well as a list of one or more license templates.
        PlayReadyLicenseResponseTemplate responseTemplate = new PlayReadyLicenseResponseTemplate();

        // The PlayReadyLicenseTemplate class represents a license template for creating PlayReady licenses
        // to be returned to the end users. 
        //It contains the data on the content key in the license and any rights or restrictions to be 
        //enforced by the PlayReady DRM runtime when using the content key.
        PlayReadyLicenseTemplate licenseTemplate = new PlayReadyLicenseTemplate();
        //Configure whether the license is persistent (saved in persistent storage on the client) 
        //or non-persistent (only held in memory while the player is using the license).  
        licenseTemplate.LicenseType = PlayReadyLicenseType.Nonpersistent;

        // AllowTestDevices controls whether test devices can use the license or not.  
        // If true, the MinimumSecurityLevel property of the license
        // is set to 150.  If false (the default), the MinimumSecurityLevel property of the license is set to 2000.
        licenseTemplate.AllowTestDevices = true;


        // You can also configure the Play Right in the PlayReady license by using the PlayReadyPlayRight class. 
        // It grants the user the ability to play back the content subject to the zero or more restrictions 
        // configured in the license and on the PlayRight itself (for playback specific policy). 
        // Much of the policy on the PlayRight has to do with output restrictions 
        // which control the types of outputs that the content can be played over and 
        // any restrictions that must be put in place when using a given output.
        // For example, if the DigitalVideoOnlyContentRestriction is enabled, 
        //then the DRM runtime will only allow the video to be displayed over digital outputs 
        //(analog video outputs won’t be allowed to pass the content).

        //IMPORTANT: These types of restrictions can be very powerful but can also affect the consumer experience. 
        // If the output protections are configured too restrictive, 
        // the content might be unplayable on some clients. For more information, see the PlayReady Compliance Rules document.

        // For example:
        //licenseTemplate.PlayRight.AgcAndColorStripeRestriction = new AgcAndColorStripeRestriction(1);

        responseTemplate.LicenseTemplates.Add(licenseTemplate);

        return MediaServicesLicenseTemplateSerializer.Serialize(responseTemplate);
    }

Per ottenere un token di test basato sulle limitazioni del token usate per i criteri di autorizzazione della chiave, vedere la sezione Token di test.To get a test token based on the token restriction that was used for the key authorization policy, see the "Test token" section.

Tipi usati durante la definizione di ContentKeyAuthorizationPolicyTypes used when you define ContentKeyAuthorizationPolicy

ContentKeyRestrictionTypeContentKeyRestrictionType

    public enum ContentKeyRestrictionType
    {
        Open = 0,
        TokenRestricted = 1,
        IPRestricted = 2,
    }

ContentKeyDeliveryTypeContentKeyDeliveryType

    public enum ContentKeyDeliveryType
    {
      None = 0,
      PlayReadyLicense = 1,
      BaselineHttp = 2,
      Widevine = 3
    }

TokenTypeTokenType

    public enum TokenType
    {
        Undefined = 0,
        SWT = 1,
        JWT = 2,
    }

Percorsi di apprendimento di Servizi multimedialiMedia Services learning paths

Altre informazioni sui percorsi di apprendimento di Servizi multimediali di Azure:Read about the Azure Media Services learning paths:

Fornire commenti e suggerimentiProvide feedback

Usare il forum di suggerimenti degli utenti per fornire commenti e suggerimenti su come migliorare Servizi multimediali di Azure.Use the User Voice forum to provide feedback and make suggestions on how to improve Azure Media Services. È anche possibile passare direttamente a una delle categorie seguenti:You also can go directly to one of the following categories:

Passaggi successiviNext steps

Dopo avere configurato i criteri di autorizzazione della chiave simmetrica, vedere Configurare i criteri di distribuzione degli asset.Now that you have configured the content key's authorization policy, see Configure an asset delivery policy.