Use a autenticação de dois tokens

Para aplicar a autenticação de dois tokens quando os visitantes acedem a um recurso de streaming, configure rotas separadas. Uma rota é uma configuração que corresponde a pedidos para a RFC de conteúdo multimédia e direciona o tráfego HTTP para uma origem. A RFC 7230 define o protocolo HTTP. Para mais informações acerca das rotas no Media CDN, consulte o artigo Configure rotas de serviço.

Para streams HLS, a RFC suporta a autenticação de token duplo através de cookies e parâmetros de consulta de URL (sem cookies). Para streams DASH, a RFC de multimédia só suporta a autenticação de dois tokens baseada em cookies.

Esta página descreve como configurar rotas da RFC de multimédia para ajudar a proteger o conteúdo através da autenticação de token duplo.

Antes de começar

Faça o seguinte:

  1. Para tokens de curta duração, escolha um dos seguintes algoritmos de assinatura:

    • Assinaturas Ed25519
    • Códigos de autenticação de mensagens baseados em hash de chave simétrica (HMACs)

    Pode ativar algoritmos de assinatura HMAC simétricos apenas para rotas configuradas para gerar novos tokens de longa duração. Recomendamos que use assinaturas Ed25519 para um desempenho e segurança ideais, e HMACs de chave simétrica apenas quando necessário para compatibilidade com outras RFCs.

  2. Inclua as chaves necessárias num recurso EdgeCacheKeyset.

    Os tokens têm de ser assinados ou validados com chaves num recurso EdgeCacheKeyset. O conjunto de chaves tem de incluir as chaves corretas para o algoritmo de assinatura selecionado. A tabela seguinte descreve cada um dos algoritmos de assinatura e as respetivas chaves necessárias.

    Algoritmo de assinatura Chaves obrigatórias no conjunto de chaves
    Ed25519 Chaves públicas
    HMAC-SHA1 Chaves partilhadas de validação
    HMAC-SHA256 Chaves partilhadas de validação

    Como prática recomendada, crie dois conjuntos de chaves separados, um para tokens de curta duração e outro para tokens de longa duração.

    No entanto, se estiver a usar DASH e ficheiros de descrição de apresentação de multimédia (MPD) dinâmicos, tem de usar o mesmo conjunto de chaves para tokens de longa e curta duração.

  3. Para tokens de longa duração, escolha um dos seguintes formatos de token:

    • Cookies
    • Parâmetros de consulta de URL

Configure tokens de curta duração

Consoante o algoritmo de assinatura que quer usar, configure tokens de curta duração através de uma das seguintes opções.

Assinatura Ed25519

  1. Gere uma chave privada:

    openssl genpkey -algorithm ed25519 -outform PEM -out SSL_KEY_NAME.private.key
    

    Substitua SSL_KEY_NAME pelo nome de uma chave.

  2. Gere uma chave pública a partir da chave privada:

    openssl pkey -outform DER -pubout -in SSL_KEY_NAME.private.key |\
    tail -c +13 |\
    python3 -c "import base64, sys; print(('%s' % base64.urlsafe_b64encode(sys.stdin.buffer.read()))[2:-1])"
    
  3. Crie um novo conjunto de chaves com uma única chave pública:

    Consola

    1. Na Google Cloud consola, aceda à página RFC de multimédia.

      Aceda à RFC de multimédia

    2. Clique no separador Conjuntos de chaves.

    3. Clique em Criar conjunto de chaves.

    4. Em Nome, introduza um nome exclusivo para o conjunto de chaves.

    5. Opcional: em Descrição, introduza uma descrição para o conjunto de chaves.

    6. Opcional: clique em Adicionar etiqueta e, de seguida, introduza um ou mais pares chave-valor para o conjunto de chaves.

    7. Clique em Adicionar chave pública e, de seguida, faça o seguinte:

      1. Para ID, introduza um ID alfanumérico.
      2. Selecione Introduzir o valor e, em seguida, especifique o valor codificado em base64 da sua chave pública Ed25519.
    8. Clique em Criar conjunto de chaves.

    gcloud

    Use o comando gcloud edge-cache keysets create.

    gcloud edge-cache keysets create SHORT_KEYSET_NAME \
      --public-key='id=SSL_PUBLIC_KEY_NAME,value=SSL_PUBLIC_KEY_VALUE'
    

    Substitua o seguinte:

    • SHORT_KEYSET_NAME: um nome de conjunto de chaves exclusivo, por exemplo, prod-vod-keyset
    • SSL_PUBLIC_KEY_NAME: o nome da sua chave pública de SSL
    • SSL_PUBLIC_KEY_VALUE: o valor da sua chave pública de SSL

    Para rever as teclas associadas ao conjunto de teclas, use o comando gcloud edge-cache keysets describe.

    gcloud edge-cache keysets describe prod-vod-keyset
    

    O resultado é semelhante ao seguinte:

    name: prod-vod-keyset
    description: "Keyset for prod.example.com"
    publicKeys:
    - id: "key-20200918"
      value: "DThVLjhAKm3VYOvLBAwFZ5XbjVyF98Ias8NZU0WEM9w"
    - id: "key-20200808"
      value: "Lw7LDSaDUrbDdqpPA6JEmMF5BA5GPtd7sAjvsnh7uDA="
    

    Terraform

    resource "google_network_services_edge_cache_keyset" "default" {
      name        = "prod-vod-keyset"
      description = "Keyset for prod.example.com"
      public_key {
        id    = "key-20200918"
        value = "FHsTyFHNmvNpw4o7-rp-M1yqMyBF8vXSBRkZtkQ0RKY" # Update Ed25519 public key
      }
      public_key {
        id    = "key-20200808"
        value = "Lw7LDSaDUrbDdqpPA6JEmMF5BA5GPtd7sAjvsnh7uDA=" # Update Ed25519 public key
      }
    }

HMAC de chave simétrica

  1. Se nunca usou o Secret Manager, configure o Secret Manager.

  2. Crie um segredo.

  3. Adicione uma versão do Secret no formato binário.

  4. Conceda a função de acesso ao Secret Manager (roles/secretmanager.secretAccessor) à conta de serviço do Media CDN:

    Consola

    1. Na Google Cloud consola, aceda à página Secret Manager.

      Aceda ao Secret Manager

    2. Selecione a caixa de verificação junto ao nome do segredo.

    3. Clique em Mostrar painel de informações.

    4. No painel de informações, clique em Adicionar diretor.

    5. Para Novos membros, introduza a conta de serviço da RFC de multimédia neste formato:

      service-PROJECT_NUMBER@gcp-sa-mediaedgefill.iam.gserviceaccount.com
      

      Substitua PROJECT_NUMBER pelo número do seu projeto.

    6. Para Selecionar uma função, selecione Secret Manager e, de seguida, selecione Secret Manager Secret Accessor.

    gcloud

    Use o comando gcloud secrets add-iam-policy-binding.

    gcloud secrets add-iam-policy-binding projects/PROJECT_NUMBER/secrets/SECRET_ID \
      --member="serviceAccount:service-PROJECT_NUMBER@gcp-sa-mediaedgefill.iam.gserviceaccount.com" \
      --role="roles/secretmanager.secretAccessor"
    

    Substitua o seguinte:

    • PROJECT_NUMBER: o número do seu projeto
    • SECRET_ID: o ID do segredo
  5. Aceda às suas versões do Secret e copie os caminhos do Secret, incluindo os números das versões.

  6. Crie um novo conjunto de chaves com os segredos partilhados numa chave partilhada de validação:

    Consola

    1. Na Google Cloud consola, aceda à página RFC de multimédia.

      Aceda à RFC de multimédia

    2. Clique no separador Conjuntos de chaves.

    3. Clique em Criar conjunto de chaves.

    4. Em Nome, introduza um nome exclusivo para o conjunto de chaves.

    5. Opcional: em Descrição, introduza uma descrição para o conjunto de chaves.

    6. Opcional: clique em Adicionar etiqueta e, de seguida, introduza um ou mais pares chave-valor para o conjunto de chaves.

    7. Para especificar uma chave partilhada de validação, clique em Adicionar chave partilhada de validação e, de seguida, faça o seguinte:

      1. Para Segredo, selecione um segredo na lista, introduza um segredo manualmente especificando o respetivo ID do recurso ou crie um novo segredo e, em seguida, selecione-o.

      2. Para Versão secreta, selecione uma versão na lista ou crie uma nova versão secreta e, em seguida, selecione-a.

    8. Clique em Criar conjunto de chaves.

    gcloud

    Use o comando gcloud edge-cache keysets create.

    gcloud edge-cache keysets create SHORT_KEYSET_NAME \
      --validation-shared-key='secret_version=projects/PROJECT_NUMBER/secrets/SECRET_ID/versions/KEY_VERSION'
    

    Substitua o seguinte:

    • SHORT_KEYSET_NAME: um nome exclusivo para o conjunto de chaves, por exemplo, prod-vod-keyset
    • PROJECT_NUMBER: o ID do seu projeto
    • SECRET_ID: o ID do recurso do segredo
    • KEY_VERSION: a versão do secret que quer usar

Configure tokens de longa duração

Google-owned and managed keys são definidas pelo conjunto de chaves. Isto significa que dois conjuntos de chaves diferentes têmGoogle-owned and managed keysdiferentes. Google-owned and managed keys são rodados regularmente.

Configure tokens de longa duração através de uma das seguintes opções:

Consola

  1. Crie ou modifique um conjunto de chaves.

  2. Na secção Chaves, selecione Usar Google-owned and managed key para autenticação de dois tokens.

gcloud e YAML

Use uma das seguintes opções:

  • Crie uma chave de assinatura gerida pela Google:

    gcloud edge-cache keysets create LONG_KEYSET_NAME \
        --public-key='id=google-managed-key,managed=true'
    

    Substitua LONG_KEYSET_NAME por um nome de chave, por exemplo, prod-vod-keyset-long.

  • Modifique um conjunto de chaves existente:

    1. Exporte o conjunto de chaves para um ficheiro YAML. Use o comando gcloud edge-cache keysets export.

      gcloud edge-cache keysets export LONG_KEYSET_NAME \
         --destination=prod-vod-keyset-long.yaml
      
    2. Num editor de texto ou nas ferramentas de gestão de configuração, edite a configuração do conjunto de chaves para que seja semelhante à seguinte:

      name: projects/my-project/locations/global/edgeCacheKeysets/LONG_KEYSET_NAME
      publicKeys:
      - id: some-key
        value: MC4CAQAwBQYDK2VwBCIEINV2iYugIWBuvGBJUQ_Ab69E4v4zcVqvgYHw-iZxGzcd
      - id: google-managed-key
        managed: true
      
    3. Importe o conjunto de teclas editado. Use o comando gcloud edge-cache keysets import:

      gcloud edge-cache keysets import LONG_KEYSET_NAME \
          --source=prod-vod-keyset-long.yaml
      

Pode incluir chaves públicas adicionais no conjunto de chaves de tokens de longa duração. O conjunto de chaves pode ter, no máximo, três chaves públicas. Na prática, isto significa que o conjunto de chaves pode ter duas chaves geridas pelo utilizador e uma Google-owned and managed key.

A RFC 6819 é sempre usada pela RFC 6819 para gerar tokens. Google-owned and managed keyAs chaves geridas pelo utilizador só podem ser usadas para validação.

A inclusão de chaves públicas adicionais é útil para permitir que a sua aplicação de leitor aceda a playlists de multimédia e segmentos de multimédia através de pedidos assinados que são gerados pelas suas próprias chaves privadas.

Configure a troca de tokens

Esta secção mostra como configurar a troca de tokens criando várias rotas. Uma rota permite-lhe otimizar o comportamento com base no tipo de conteúdo, nos atributos do cliente e nos seus requisitos de atualidade. Nos exemplos seguintes, usamos rotas para configurar a troca de tokens para cada parte de um pedido de multimédia.

Configure a rota do manifesto principal para exigir tokens de curta duração

Configure a RFC de multimédia para exigir tokens de curta duração na rota do manifesto principal.

Consola

Ative a autenticação de tokens de curta duração na rota do manifesto principal:

  1. Na Google Cloud consola, aceda à página RFC de multimédia.

    Aceda à RFC de multimédia

  2. Para abrir a página Detalhes de um serviço, clique no nome do serviço.

  3. Para mudar para o modo de edição, clique no botão Editar.

  4. Para navegar para a secção Encaminhamento, clique em Seguinte.

  5. Expanda a regra de anfitrião à qual quer adicionar a regra de encaminhamento do manifesto principal.

  6. Clique em Adicionar regra de encaminhamento.

    Em alternativa, para editar uma regra de encaminhamento, clique em Editar na linha respetiva.

  7. No painel Editar regra de encaminhamento, para Prioridade, defina um valor, por exemplo, 1.

  8. Em Descrição, indique uma breve descrição que possa ajudar a identificar a regra na lista de regras.

  9. Na secção Correspondência, clique em Adicionar uma condição de correspondência. Em seguida, faça o seguinte:

    1. Para Tipo de correspondência, selecione Correspondência de modelo de caminho.
    2. Para Correspondência de caminho, especifique os nomes ou os modelos de caminho para o ficheiro de playlist principal HLS (M3U8) ou o manifesto DASH (MPD). Para mais informações, consulte o artigo Correspondência de caminhos.
  10. Clique em Configurações avançadas.

  11. Na secção Ação de encaminhamento, clique em Adicione um item.

  12. Para Tipo, selecione Política de RFC.

  13. Na secção Pedido assinado, para Modo de pedido assinado, selecione Exigir tokens.

  14. Na secção Conjunto de chaves de pedidos assinados, faça o seguinte:

    1. Para especificar o conjunto de chaves para tokens de curta duração, clique em Selecionar um conjunto de chaves e selecione o seu conjunto de chaves de token de curta duração.

      Em alternativa, para criar um novo conjunto de chaves com as chaves de que precisa, clique em Criar novo conjunto de chaves. Em seguida, selecione-o.

    2. Para o Algoritmo de assinatura, selecione Ed25519 com chaves públicas.

    3. Para o parâmetro de consulta de token, mantenha o valor predefinido, edge-cache-token.

      Em alternativa, se planeia usar parâmetros de consulta de URL do manifesto HLS em vez de cookies para autenticação, especifique o parâmetro no qual armazenar os tokens de pedido.

    4. Para Tempo máximo de vida, especifique, em segundos, o tempo de vida máximo dos tokens de pedidos recebidos.

  15. Para guardar as alterações na secção Ação de trajeto, clique em Concluído.

  16. Para guardar as alterações na regra de encaminhamento, clique em Guardar.

gcloud e YAML

  1. Exporte a configuração da RFC de conteúdo multimédia para um ficheiro YAML. Use o comando gcloud edge-cache services export.

    gcloud edge-cache services export SERVICE_NAME \
        --destination=FILENAME.yaml
    

    Substitua o seguinte:

    • SERVICE_NAME: o nome do seu serviço
    • FILENAME : o nome do seu ficheiro YAML
  2. Para ativar a autenticação de tokens de curta duração na regra de encaminhamento do manifesto principal, na secção cdnPolicy do ficheiro YAML, especifique uma configuração signedTokensOptions.

      pathMatchers:
      - name: "ROUTE_NAME"
        routeRules:
        - priority: 1
          description: "ROUTE_DESCRIPTION"
          origin: "ORIGIN_NAME"
          matchRules:
          - pathTemplateMatch: "/MANIFEST_OR_PLAYLIST"
          routeAction:
            cdnPolicy:
              cacheMode: CACHE_ALL_STATIC
              signedRequestMode: REQUIRE_TOKENS
              signedRequestKeyset: SHORT_KEYSET_NAME
              signedRequestMaximumExpirationTtl: SIGNED_REQUEST_MAXIMUM_EXPIRATION_TIME
              signedTokenOptions:
                tokenQueryParameter: SHORT_TOKEN_NAME
    

    Substitua o seguinte:

    • ROUTE_NAME: o nome da regra de trajeto
    • ROUTE_DESCRIPTION: uma descrição da regra de encaminhamento
    • ORIGIN_NAME: o nome de origem
    • MANIFEST_OR_PLAYLIST: o nome do ficheiro da playlist principal (M3U8) HLS ou do manifesto DASH (MPD). Para mais informações, consulte o artigo Correspondência de caminhos.
    • SHORT_KEYSET_NAME: o nome do conjunto de chaves a usar para tokens de curta duração
    • SIGNED_REQUEST_MAXIMUM_EXPIRATION_TIME: a hora de validade dos pedidos assinados, por exemplo, 600s. Para mais informações, consulte signedRequestMaximumExpirationTtl.
    • Opcional: SHORT_TOKEN_NAME: o parâmetro de consulta no qual encontrar o token curto. O valor predefinido é edge-cache-token. Para mais informações, consulte SignedTokenOptions.

    Quando usar HMACs de chave simétrica, na secção signedTokenOptions, acrescente allowedSignatureAlgorithms com o respetivo valor como HMAC_SHA_256:

           allowedSignatureAlgorithms:
           - HMAC_SHA_256
    
  3. Para atualizar o serviço, importe a configuração da RFC de multimédia a partir do ficheiro YAML. Use o comando gcloud edge-cache services import.

    gcloud edge-cache services import SERVICE_NAME \
        --source=FILENAME.yaml
    

Isto conclui o processo de ativação da autenticação com um único token.

Para configurar a autenticação de dois tokens, avance para as secções seguintes.

Configure a regra de rota do manifesto principal para gerar tokens de longa duração

Configure a RFC de multimédia para gerar tokens de longa duração na rota do manifesto principal. Escolha cookies ou parâmetros de consulta de URL para gerar estes tokens.

Consola

Modifique a regra de encaminhamento do manifesto principal para que a RFC de multimédia possa gerar tokens de longa duração no encaminhamento:

  1. Na página Editar regra de encaminhamento, clique em Configurações avançadas.
  2. Para Tipo, selecione Política de RFC.
  3. Expanda a opção Autenticação com dois tokens.
  4. Para Ação de assinatura, selecione Gerar novo token de longa duração.
  5. Para Tipo de assinatura, selecione uma das seguintes opções:

    • Através de cookies (para streaming HLS e DASH): configura a RFC de multimédia para devolver um Edge-Cache-Cookie com a resposta do manifesto principal.
    • Através de parâmetros de consulta de URL do manifesto HLS (sem cookies): configura a RFC de multimédia para manipular o manifesto principal HLS anexando um token de longa duração a cada URL.
  6. Na secção Gerar novo token de longa duração, faça o seguinte:

    1. Para especificar um conjunto de chaves para tokens de longa duração, clique em Selecionar um conjunto de chaves e selecione o seu conjunto de chaves de token de longa duração.

      Em alternativa, clique em Criar novo conjunto de chaves para criar um novo conjunto de chaves com as chaves de que precisa. Em seguida, selecione-o.

    2. Para o TTL do token, especifique, em segundos, a duração máxima do token de longa duração.

    3. Para o Tipo de assinatura, se selecionou a opção Através de cookies, na secção Parâmetros copiados, selecione os parâmetros que quer que a RFC de multimédia copie do token de curta duração para o token de longa duração. Para usar a autenticação de dois tokens, tem de selecionar PathGlobs (ou qualquer um dos respetivos alias, acl ou paths) ou URLPrefix.

      Se selecionou a opção através de parâmetros de consulta de URL do manifesto HLS, para Parâmetro de consulta de token, mantenha o valor predefinido, edge-cache-token.

  7. Para guardar as alterações na secção Ação de trajeto, clique em Concluído.

  8. Para guardar as alterações na regra de encaminhamento, clique em Guardar.

    É apresentada uma mensagem a perguntar se quer criar as rotas para listas de reprodução e segmentos de multimédia automaticamente ou manualmente. Se selecionar a opção automática, é criada uma única nova rota para a assinatura de cookies e duas rotas para a assinatura sem cookies. Se selecionar a opção manual, avance para a secção seguinte.

gcloud e YAML

Modifique a secção addSignatures da regra de rota do manifesto principal para que o Media CDN possa gerar tokens de longa duração na rota:

Cookies

          addSignatures:
            actions:
              - GENERATE_COOKIE
            keyset: LONG_KEYSET_NAME
            tokenTtl: TOKEN_EXPIRATION_TIME
            copiedParameters:
              - PathGlobs
              - SessionID

Substitua o seguinte:

  • LONG_KEYSET_NAME: o nome do seu conjunto de chaves de token de longa duração

  • TOKEN_EXPIRATION_TIME: o período de validade do token de longa duração. Por exemplo, 86400s para um período de validade de um dia

Este exemplo de código implementa as seguintes alterações:

  • addSignatures.actions: GENERATE_COOKIE: configura a RFC de multimédia para devolver um Edge-Cache-Cookie com a resposta do manifesto principal

  • copiedParameters.PathGlobs: configura a RFC de multimédia para copiar o PathGlobs do token de curta duração para o token de longa duração. Para usar a autenticação de dois tokens, tem de usar copiedParameters.PathGlobs ou copiedParameters.URLPrefix. Para mais informações, consulte copiedParameters.

  • Opcional: copiedParameters.SessionID: configura a RFC de multimédia para copiar o SessionID do token de curta duração para o token de longa duração

Quando a ação GENERATE_COOKIE é aplicada, a CDN de multimédia devolve um cabeçalho Set-Cookie semelhante ao seguinte com a resposta do manifesto principal:

Set-Cookie: Edge-Cache-Cookie=PathGlobs=PATHS~SessionID=SESSION_ID~Expires=EXPIRATION~_GO=Generated~Signature=SIGNATURE

Parâmetros de consulta de URL

          addSignatures:
            actions:
              - GENERATE_TOKEN_HLS_COOKIELESS
            keyset: LONG_KEYSET_NAME
            tokenTtl: TOKEN_EXPIRATION_TIME
            copiedParameters:
              - PathGlobs
              - SessionID
            tokenQueryParameter: LONG_TOKEN_NAME

Substitua o seguinte:

  • LONG_KEYSET_NAME: o nome do seu conjunto de chaves de longa duração

  • TOKEN_EXPIRATION_TIME: o tempo de expiração do token de longa duração, por exemplo, 86400s para um tempo de expiração de um dia

Este exemplo de código implementa as seguintes alterações:

  • addSignatures.actions: GENERATE_TOKEN_HLS_COOKIELESS: configura a RFC de multimédia para manipular o manifesto principal do HLS anexando um token de longa duração a cada URI presente.

  • copiedParameters.PathGlobs: configura a RFC de multimédia para copiar o PathGlobs do token de curta duração para o token de longa duração. Para usar a autenticação de dois tokens, tem de usar copiedParameters.PathGlobs ou copiedParameters.URLPrefix. Para mais informações, consulte copiedParameters.

  • Opcional: copiedParameters.SessionID: configura a RFC de multimédia para copiar o SessionID do token de curta duração para o token de longa duração.

  • Opcional: LONG_TOKEN_NAME: o parâmetro de consulta no qual colocar o token longo gerado. O valor predefinido é edge-cache-token. Para mais informações, consulte tokenQueryParameter.

O ficheiro do manifesto seguinte mostra a ação GENERATE_TOKEN_HLS_COOKIELESS aplicada:

#EXTM3U
#EXT-X-STREAM-INF:BANDWIDTH=1280000,AVERAGE-BANDWIDTH=1000000
http://example.com/HLS_PRIMARY_PLAYLIST.m3u8?LONG_TOKEN_NAME=PathGlobs=PATHS~SessionID=SESSION_ID~Expires=EXPIRATION~_GO=Generated~Signature=SIGNATURE

A RFC de conteúdo multimédia valida o token de curta duração e, em seguida, gera e armazena o token de longa duração no parâmetro de consulta LONG_TOKEN_NAME.

Configure as rotas de segmentos e playlists de multimédia para exigirem tokens de longa duração

Configure a playlist de multimédia e os segmentos de routes para exigirem tokens de longa duração.

Consola

Cookies

Crie uma regra de trajeto para o trajeto de segmentos e playlists de multimédia:

  1. Na página Editar serviço de cache na extremidade, na secção Encaminhamento, clique na regra de anfitrião que tem a rota do manifesto principal.
  2. Clique em Adicionar regra de encaminhamento.
  3. No painel Editar regra de trajeto, para Prioridade, defina um valor superior ao do trajeto do manifesto principal, por exemplo, 2. Os valores mais elevados indicam uma prioridade mais baixa.
  4. Em Descrição, indique uma breve descrição que possa ajudar a identificar a regra na lista de regras.
  5. Defina os seguintes campos conforme sugerido:

    • Selecione uma origem: igual à da regra de encaminhamento do manifesto principal
    • Adicione uma condição de correspondência: igual à regra de rota do manifesto principal
    • Tipo: Política de RFC
    • Modo de pedido assinado: exigir tokens
    • Selecionar um conjunto de chaves: igual ao dos tokens de longa duração
    • Algoritmo de assinatura: igual ao da regra de encaminhamento do manifesto principal
  6. Expanda a opção Autenticação com dois tokens.

  7. Para Ação de assinatura, mantenha o valor predefinido Nenhuma.

  8. Clique em Concluído e, de seguida, clique em Guardar.

Parâmetros de consulta de URL

  1. Crie uma regra de encaminhamento para a playlist de multimédia.

    1. Na página Editar serviço de cache na extremidade, na secção Encaminhamento, clique na regra de anfitrião que tem a rota do manifesto principal.
    2. Clique em Adicionar regra de encaminhamento.
    3. No painel Editar regra de encaminhamento, para Prioridade, defina um valor superior ao da rota do manifesto principal, por exemplo, 2. Os valores mais elevados indicam uma prioridade mais baixa.
    4. Em Descrição, indique uma breve descrição que possa ajudar a identificar a regra na lista de regras.
    5. Defina os seguintes campos conforme sugerido:

      • Selecione uma origem: igual à regra de encaminhamento do manifesto principal
      • Adicione uma condição de correspondência: igual à da regra de trajeto do manifesto principal
      • Tipo: Política de RFC
      • Modo de pedido assinado: exigir tokens
      • Selecionar um conjunto de chaves: igual ao dos tokens de longa duração
      • Algoritmo de assinatura: o mesmo que para a regra de encaminhamento do manifesto principal
      • Parâmetro de consulta de token: igual ao dos tokens de longa duração
    6. Expanda a opção Autenticação com dois tokens.

    7. Para Ação de assinatura, selecione Propagar token de longa duração existente.

      Esta opção só é ativada depois de a RFC de multimédia verificar que o token de longa duração foi gerado através do tipo de assinatura via parâmetros de consulta do URL do manifesto HLS (sem cookies).

    8. Para o parâmetro de consulta de token, mantenha o valor predefinido, edge-cache-token.

    9. Clique em Concluído e, de seguida, clique em Guardar.

  2. Crie uma regra de encaminhamento para segmentos de multimédia.

    Este caminho é semelhante ao caminho para playlists de multimédia, com as seguintes diferenças importantes:

    • Para Prioridade, defina um valor superior ao da regra de encaminhamento da playlist de multimédia, por exemplo, 3.
    • Em Descrição, indique uma breve descrição que possa ajudar a identificar a regra na lista de regras.
    • Na secção Autenticação com dois tokens, para a Ação de assinatura, mantenha o valor predefinido Nenhuma.

gcloud e YAML

Edite o ficheiro YAML:

Cookies

Configure a playlist de multimédia e os segmentos para exigirem cookies de longa duração:

    - priority: 2
      description: "SEGMENTS_ROUTE_DESCRIPTION"
      origin: "ORIGIN_NAME"
      matchRules:
      - pathTemplateMatch: "/**.m3u8" # HLS media playlists
      - pathTemplateMatch: "/**.ts" # HLS segments
      - pathTemplateMatch: "/**.m4s" # DASH / CMAF segments
      routeAction:
        cdnPolicy:
          cacheMode: CACHE_ALL_STATIC
          signedRequestMode: REQUIRE_TOKENS
          signedRequestKeyset: LONG_KEYSET_NAME

Substitua SEGMENTS_ROUTE_DESCRIPTION por uma descrição do trajeto.

Este exemplo de código implementa as seguintes alterações:

  • priority: 2: a prioridade do trajeto. Os valores mais elevados indicam uma prioridade mais baixa. Uma vez que a rota para as suas playlists multimédia e segmentos multimédia corresponde a qualquer nome de ficheiro que termine em .m3u8, a prioridade da rota tem de ser inferior à rota que criou anteriormente para o manifesto principal.
  • signedRequestMode: REQUIRE_TOKENS: aplica tokens a playlists de multimédia e segmentos multimédia. Se estiver a usar ficheiros de descrição de apresentação (MPD) de multimédia estático, os conjuntos de chaves longos e curtos podem ser diferentes. Se estiver a usar ficheiros MPD dinâmicos, os conjuntos de chaves longos e curtos têm de ser iguais.
  • signedRequestKeyset: LONG_KEYSET_NAME: A RFC de multimédia usa o conjunto de chaves de longa duração para validar o cookie de longa duração fornecido por um agente do utilizador para pedidos de playlists de multimédia e segmentos de multimédia.

Parâmetros de consulta de URL

Adicione duas configurações de rotas:

  1. Configure as rotas do manifesto de multimédia HLS para propagar tokens de longa duração:

       - priority: 2
         description: "PLAYLIST_ROUTE_DESCRIPTION"
         origin: "ORIGIN_NAME"
         matchRules:
         - pathTemplateMatch: "/**.m3u8" # HLS media playlists
         routeAction:
           cdnPolicy:
           cacheMode: CACHE_ALL_STATIC
           signedRequestMode: REQUIRE_TOKENS
           signedRequestKeyset: LONG_KEYSET_NAME
           addSignatures:
             actions:
             - PROPAGATE_TOKEN_HLS_COOKIELESS
    

    Substitua PLAYLIST_ROUTE_DESCRIPTION por uma descrição do trajeto.

    Este exemplo de código implementa as seguintes alterações:

    • priority: 2: a prioridade do trajeto. Os valores mais elevados indicam uma prioridade inferior. Uma vez que o caminho das suas playlists de multimédia corresponde a qualquer nome de ficheiro que termine em .m3u8, a prioridade do caminho tem de ser inferior à do caminho que criou anteriormente para o manifesto principal.
    • signedRequestMode: REQUIRE_TOKENS: aplica tokens a playlists de multimédia e segmentos multimédia. Se estiver a usar ficheiros de descrição de apresentação (MPD) de multimédia estático, os conjuntos de chaves longos e curtos podem ser diferentes. Se estiver a usar ficheiros MPD dinâmicos, os conjuntos de chaves longos e curtos têm de ser iguais.
    • signedRequestKeyset: LONG_KEYSET_NAME: A RFC de multimédia usa o conjunto de chaves de longa duração para validar o cookie de longa duração fornecido por um agente do utilizador para pedidos de playlists de multimédia e segmentos de multimédia.
    • addSignatures.actions: PROPAGATE_TOKEN_HLS_COOKIELESS: configura o Media CDN para copiar o token de longa duração para os URIs dos segmentos multimédia nas playlists multimédia.
  2. Configure as rotas de segmentos para exigir tokens de longa duração:

       - priority: 3
         description: "SEGMENTS_ROUTE_DESCRIPTION"
         origin: "ORIGIN_NAME"
         matchRules:
         - pathTemplateMatch: "/**.ts" # HLS segments
         routeAction:
           cdnPolicy:
             cacheMode: CACHE_ALL_STATIC
             signedRequestMode: REQUIRE_TOKENS
             signedRequestKeyset: LONG_KEYSET_NAME
    

    Substitua SEGMENTS_ROUTE_DESCRIPTION por uma descrição do trajeto.

    Este exemplo de código implementa as seguintes alterações:

    • priority: 3: a prioridade do trajeto. Os valores mais elevados indicam uma prioridade inferior. A prioridade desta rota tem de ser inferior à da rota criada anteriormente para as playlists de multimédia.
    • signedRequestMode: REQUIRE_TOKENS: aplica tokens a playlists de multimédia e segmentos multimédia.
    • signedRequestKeyset: LONG_KEYSET_NAME: A RFC de multimédia usa o conjunto de chaves de longa duração para validar o token assinado de longa duração fornecido por um agente do utilizador para pedidos de playlist de multimédia e segmento de multimédia.

Exemplo de ficheiro de configuração

O seguinte exemplo de código mostra um ficheiro de configuração concluído:

Cookies

name: SERVICE_NAME
routing:
  hostRules:
  - hosts:
    - DOMAIN_NAME
    pathMatcher: routes
  pathMatchers:
    - name: "ROUTE_NAME"
      routeRules:
      - priority: 1
        description: "ROUTE_DESCRIPTION"
        origin: "ORIGIN_NAME"
        matchRules:
        - pathTemplateMatch: "/HLS_MASTER_PLAYLIST.m3u8" # HLS primary playlists
        - pathTemplateMatch: "/DASH_MANIFESTS.mpd" # DASH manifests
        routeAction:
          cdnPolicy:
            cacheMode: CACHE_ALL_STATIC
            signedRequestMode: REQUIRE_TOKENS
            signedRequestKeyset: SHORT_KEYSET_NAME
            signedRequestMaximumExpirationTtl: SIGNED_REQUEST_MAXIMUM_EXPIRATION_TIME
            addSignatures:
              actions:
                - GENERATE_COOKIE
              keyset: LONG_KEYSET_NAME
              tokenTtl: TOKEN_EXPIRATION_TIME
              copiedParameters:
                - PathGlobs
                - SessionID
      - priority: 2
        description: "SEGMENTS_ROUTE_DESCRIPTION"
        origin: "ORIGN_NAME"
        matchRules:
        - pathTemplateMatch: "/**.m3u8" # HLS media playlists
        - pathTemplateMatch: "/**.ts" # HLS segments
        - pathTemplateMatch: "/**.m4s" # DASH / CMAF segments
        routeAction:
          cdnPolicy:
            cacheMode: CACHE_ALL_STATIC
            signedRequestMode: REQUIRE_TOKENS
            signedRequestKeyset: LONG_KEYSET_NAME

Parâmetros de consulta de URL

name: SERVICE_NAME
routing:
  hostRules:
  - hosts:
    - DOMAIN_NAME
    pathMatcher: routes
  pathMatchers:
    - name: "ROUTE_NAME"
      routeRules:
      - priority: 1
        description: "ROUTE_DESCRIPTION"
        origin: "ORIGIN_NAME"
        matchRules:
        - pathTemplateMatch: "/HLS_PRIMARY_PLAYLIST.m3u8" # HLS primary playlists
        routeAction:
          cdnPolicy:
            cacheMode: CACHE_ALL_STATIC
            signedRequestMode: REQUIRE_TOKENS
            signedRequestKeyset: SHORT_KEYSET_NAME
            signedRequestMaximumExpirationTtl: SIGNED_REQUEST_MAXIMUM_EXPIRATION_TIME
            signedTokenOptions:
              tokenQueryParameter: SHORT_TOKEN_NAME
            addSignatures:
              actions:
                - GENERATE_TOKEN_HLS_COOKIELESS
              keyset: LONG_KEYSET_NAME
              tokenTtl: TOKEN_EXPIRATION_TIME
              tokenQueryParameter: LONG_TOKEN_NAME
              copiedParameters:
                - PathGlobs
                - SessionID
      - priority: 2
        description: "PLAYLIST_ROUTE_DESCRIPTION"
        origin: "ORIGIN_NAME"
        matchRules:
        - pathTemplateMatch: "/**.m3u8" # HLS media playlists
        routeAction:
          cdnPolicy:
            cacheMode: CACHE_ALL_STATIC
            signedRequestMode: REQUIRE_TOKENS
            signedRequestKeyset: LONG_KEYSET_NAME
            addSignatures:
              actions:
                - PROPAGATE_TOKEN_HLS_COOKIELESS
      - priority: 3
        description: "SEGMENTS_ROUTE_DESCRIPTION"
        origin: "ORIGIN_NAME"
        matchRules:
        - pathTemplateMatch: "/**.ts" # HLS segments
        routeAction:
          cdnPolicy:
            cacheMode: CACHE_ALL_STATIC
            signedRequestMode: REQUIRE_TOKENS
            signedRequestKeyset: LONG_KEYSET_NAME

Gere tokens de curta duração no servidor da aplicação

Para obter informações sobre a geração de tokens, consulte o artigo Gere tokens.

Aplique proteções de conteúdo de defesa em profundidade

Como prática recomendada, ative a autenticação de origem da seguinte forma: