Todos os produtos
Search
Central de documentação

ApsaraVideo Live:Access control

Última atualização: Jun 30, 2026

O ApsaraVideo Live oferece controle de acesso por meio de listas de bloqueios ou de permissões baseadas em Referer, User-Agent e endereços IP para restringir o acesso não autorizado aos seus recursos de vídeo.

Visão geral

O controle de acesso permite configurar políticas na nuvem que protegem os recursos de vídeo. Essa funcionalidade exige apenas configuração no console, sem necessidade de desenvolvimento adicional, e entra em vigor imediatamente. Políticas suportadas:

  • Lista de bloqueios ou de permissões de Referer

  • Lista de bloqueios ou de permissões de User-Agent

  • Lista de bloqueios ou de permissões de endereços IP

Nota

Devido à complexidade e aos riscos de configuração incorreta, a definição de lista de bloqueios ou de permissões de User-Agent não está disponível no console do ApsaraVideo Live. Para configurar esse recurso, envie um ticket para entrar em contato com o suporte técnico da Alibaba Cloud. Para mais informações, consulte Fale conosco.

Cenários

  • Configuração simples e eficaz para proteção básica, especialmente contra acessos não autorizados via navegador.

  • Os controles de Referer e User-Agent dependem de cabeçalhos HTTP, que são suscetíveis a falsificação e oferecem segurança limitada.

  • Controles baseados em IP são difíceis de gerenciar em grande escala e inadequados para distribuição massiva de conteúdo.

Lista de bloqueios ou de permissões de Referer

  • Visão geral

    • O cabeçalho HTTP Referer identifica a origem das requisições. Configure uma lista de bloqueios ou de permissões de Referer para filtrar requisições e controlar o acesso aos recursos de vídeo.

    • Quando uma requisição chega a um ponto de presença (POP) da Alibaba Cloud CDN, o POP a verifica em relação à lista de Referer. Requisições correspondentes recebem os dados de vídeo; requisições não correspondentes recebem HTTP 403.

    • Nenhuma lista de bloqueios ou de permissões de Referer é ativada por padrão. Configure uma conforme as necessidades do seu negócio.

    • Nomes de domínio com curinga são suportados. Por exemplo, se você especificar example.com, a lista corresponderá ao nome de domínio com curinga *.example.com e a todos os seus subdomínios.

    • É possível definir se requisições com cabeçalho Referer vazio serão permitidas. Permitir cabeçalhos vazios possibilita que usuários acessem recursos inserindo URLs diretamente no navegador.

  • Métodos de configuração

    • Console: Para mais informações, consulte Configurar proteção contra hotlink.

    • API: Chame a operação BatchSetLiveDomainConfigs para configurar vários nomes de domínio simultaneamente, incluindo a configuração da lista de bloqueios ou de permissões de Referer.

      Adicione a dependência do SDK Java ao pom.xml.

      <dependency>
        <groupId>com.aliyun</groupId>
        <artifactId>alibabacloud-live20161101</artifactId>
        <version>2.0.3</version>
      </dependency>
      

      Configure a proteção contra hotlink baseada em Referer:

      // This file is auto-generated, don't edit it. Thanks.
      package demo;
      
      import com.aliyun.auth.credentials.Credential;
      import com.aliyun.auth.credentials.provider.StaticCredentialProvider;
      import com.aliyun.core.http.HttpClient;
      import com.aliyun.core.http.HttpMethod;
      import com.aliyun.core.http.ProxyOptions;
      import com.aliyun.httpcomponent.httpclient.ApacheAsyncHttpClientBuilder;
      import com.aliyun.sdk.service.live20161101.models.*;
      import com.aliyun.sdk.service.live20161101.*;
      import com.google.gson.Gson;
      import darabonba.core.RequestConfiguration;
      import darabonba.core.client.ClientOverrideConfiguration;
      import darabonba.core.utils.CommonUtil;
      import darabonba.core.TeaPair;
      
      //import javax.net.ssl.KeyManager;
      //import javax.net.ssl.X509TrustManager;
      import java.net.InetSocketAddress;
      import java.time.Duration;
      import java.util.*;
      import java.util.concurrent.CompletableFuture;
      import java.io.*;
      
      public class BatchSetLiveDomainConfigs {
          public static void main(String[] args) throws Exception {
      
              // HttpClient Configuration
              /*HttpClient httpClient = new ApacheAsyncHttpClientBuilder()
                      .connectionTimeout(Duration.ofSeconds(10)) // Set the connection timeout time, the default is 10 seconds
                      .responseTimeout(Duration.ofSeconds(10)) // Set the response timeout time, the default is 20 seconds
                      .maxConnections(128) // Set the connection pool size
                      .maxIdleTimeOut(Duration.ofSeconds(50)) // Set the connection pool timeout, the default is 30 seconds
                      // Configure the proxy
                      .proxy(new ProxyOptions(ProxyOptions.Type.HTTP, new InetSocketAddress("<YOUR-PROXY-HOSTNAME>", 9001))
                              .setCredentials("<YOUR-PROXY-USERNAME>", "<YOUR-PROXY-PASSWORD>"))
                      // If it is an https connection, you need to configure the certificate, or ignore the certificate(.ignoreSSL(true))
                      .x509TrustManagers(new X509TrustManager[]{})
                      .keyManagers(new KeyManager[]{})
                      .ignoreSSL(false)
                      .build();*/
      
              // Configure Credentials authentication information, including ak, secret, token
              StaticCredentialProvider provider = StaticCredentialProvider.create(Credential.builder()
                      // Please ensure that the environment variables ALIBABA_CLOUD_ACCESS_KEY_ID and ALIBABA_CLOUD_ACCESS_KEY_SECRET are set.
                      .accessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"))
                      .accessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"))
                      //.securityToken(System.getenv("ALIBABA_CLOUD_SECURITY_TOKEN")) // use STS token
                      .build());
      
              // Configure the Client
              AsyncClient client = AsyncClient.builder()
                      .region("<Your RegionId>") // Region ID
                      //.httpClient(httpClient) // Use the configured HttpClient, otherwise use the default HttpClient (Apache HttpClient)
                      .credentialsProvider(provider)
                      //.serviceConfiguration(Configuration.create()) // Service-level configuration
                      // Client-level configuration rewrite, can set Endpoint, Http request parameters, etc.
                      .overrideConfiguration(
                              ClientOverrideConfiguration.create()
                                        // The service endpoint. Refer to https://api.alibabacloud.com/product/live.
                                      .setEndpointOverride("live.aliyuncs.com")
                              //.setConnectTimeout(Duration.ofSeconds(30))
                      )
                      .build();
      
              // Parameter settings for API request
              BatchSetLiveDomainConfigsRequest batchSetLiveDomainConfigsRequest = BatchSetLiveDomainConfigsRequest.builder()
                      .domainNames("<Your DomainNames>")
                      .functions("<Your Functions>")
                      // Request-level configuration rewrite, can set Http request parameters, etc.
                      // .requestConfiguration(RequestConfiguration.create().setHttpHeaders(new HttpHeaders()))
                      .build();
      
              // Asynchronously get the return value of the API request
              CompletableFuture<BatchSetLiveDomainConfigsResponse> response = client.batchSetLiveDomainConfigs(batchSetLiveDomainConfigsRequest);
              // Synchronously get the return value of the API request
              BatchSetLiveDomainConfigsResponse resp = response.get();
              System.out.println(new Gson().toJson(resp));
              // Asynchronous processing of return values
              /*response.thenAccept(resp -> {
                  System.out.println(new Gson().toJson(resp));
              }).exceptionally(throwable -> { // Handling exceptions
                  System.out.println(throwable.getMessage());
                  return null;
              });*/
      
              // Finally, close the client
              client.close();
          }
      
      }
      Nota
      • Neste exemplo, DomainNames especifica o domínio de streaming. O campo referer_white_domain_list lista os nomes de domínio permitidos. O parâmetro allow_empty está definido como off para negar requisições com cabeçalho Referer vazio.

      • Para obter informações sobre o SDK de servidor para Java, consulte Usar o SDK de servidor para Java.

  • Observações de uso

    Importante
    • As listas de bloqueios e de permissões são mutuamente exclusivas.

    • Clientes móveis enviam requisições com cabeçalho Referer vazio por padrão. Para negar essas requisições, configure um cabeçalho Referer confiável para clientes móveis por meio do ApsaraVideo Player.

    • Se você negar cabeçalhos Referer vazios, configure a aceleração segura HTTPS e o redirecionamento de URL para encaminhar requisições HTTP para HTTPS. Isso evita que navegadores removam o cabeçalho Referer quando páginas HTTPS solicitam recursos HTTP.

  • Exemplo

    Você configura uma lista de permissões de Referer que inclui example.com para o domínio de streaming demo.developer.aliyundoc.com e nega requisições com cabeçalho Referer vazio.

    1. Requisição de exemplo:

      curl -i 'http://demo.developer.aliyundoc.com/apptest/stream0000'
    2. Resposta de erro de exemplo:

      X-Tengine-Error:denied by Referer ACL
    3. Requisição de exemplo com o cabeçalho Referer confiável:

      curl -i 'http://demo.developer.aliyundoc.com/apptest/stream0000' \
      -H 'Referer: http://www.example.com' 

Lista de bloqueios ou de permissões de User-Agent

  • Visão geral

    O cabeçalho User-Agent identifica o sistema operacional e o navegador do cliente. Configure uma lista de bloqueios ou de permissões de User-Agent para controlar o acesso de navegadores ou dispositivos específicos.

  • Métodos de configuração

    Para configurar uma lista de bloqueios ou de permissões de User-Agent, envie um ticket para entrar em contato com o suporte técnico da Alibaba Cloud. Para mais informações, consulte Fale conosco.

  • Exemplo

    • Cabeçalho User-Agent do Internet Explorer 9 em um PC:

      User-Agent:Mozilla/5.0(compatible;MSIE9.0;WindowsNT6.1;Trident/5.0;
    • Requisição com um cabeçalho User-Agent personalizado:

      curl -i 'http://demo.developer.aliyundoc.com/apptest/stream0000' \
      -H 'User-Agent: iPhone OS;MI 5'

Lista de bloqueios ou de permissões de endereços IP

  • Visão geral

    Configure uma lista de bloqueios ou de permissões de endereços IP para negar ou permitir o acesso de endereços IP específicos.

    • Endereços IP na lista de bloqueios não podem acessar o nome de domínio acelerado.

    • Somente endereços IP na lista de permissões podem acessar o nome de domínio acelerado.

    • É possível adicionar endereços IP individuais ou blocos CIDR.

      Por exemplo, 127.0.0.0/24 abrange endereços IP de 127.0.0.0 a 127.0.0.254. A máscara de sub-rede /24 designa os primeiros 24 bits como a parte de rede, deixando 8 bits para hosts (28-2 = 254 endereços utilizáveis).

  • Métodos de configuração

    • Console: Para mais informações, consulte Configurar uma lista de bloqueios ou de permissões de endereços IP.

    • API: Chame a operação BatchSetLiveDomainConfigs para configurar vários nomes de domínio simultaneamente, incluindo a configuração da lista de bloqueios ou de permissões de endereços IP.

      Configure uma lista de permissões de endereços IP usando o SDK de servidor Java:

      // This file is auto-generated, don't edit it. Thanks.
      package demo;
      
      import com.aliyun.auth.credentials.Credential;
      import com.aliyun.auth.credentials.provider.StaticCredentialProvider;
      import com.aliyun.core.http.HttpClient;
      import com.aliyun.core.http.HttpMethod;
      import com.aliyun.core.http.ProxyOptions;
      import com.aliyun.httpcomponent.httpclient.ApacheAsyncHttpClientBuilder;
      import com.aliyun.sdk.service.live20161101.models.*;
      import com.aliyun.sdk.service.live20161101.*;
      import com.google.gson.Gson;
      import darabonba.core.RequestConfiguration;
      import darabonba.core.client.ClientOverrideConfiguration;
      import darabonba.core.utils.CommonUtil;
      import darabonba.core.TeaPair;
      
      //import javax.net.ssl.KeyManager;
      //import javax.net.ssl.X509TrustManager;
      import java.net.InetSocketAddress;
      import java.time.Duration;
      import java.util.*;
      import java.util.concurrent.CompletableFuture;
      import java.io.*;
      
      public class BatchSetLiveDomainConfigs {
          public static void main(String[] args) throws Exception {
      
              // HttpClient Configuration
              /*HttpClient httpClient = new ApacheAsyncHttpClientBuilder()
                      .connectionTimeout(Duration.ofSeconds(10)) // Set the connection timeout time, the default is 10 seconds
                      .responseTimeout(Duration.ofSeconds(10)) // Set the response timeout time, the default is 20 seconds
                      .maxConnections(128) // Set the connection pool size
                      .maxIdleTimeOut(Duration.ofSeconds(50)) // Set the connection pool timeout, the default is 30 seconds
                      // Configure the proxy
                      .proxy(new ProxyOptions(ProxyOptions.Type.HTTP, new InetSocketAddress("<YOUR-PROXY-HOSTNAME>", 9001))
                              .setCredentials("<YOUR-PROXY-USERNAME>", "<YOUR-PROXY-PASSWORD>"))
                      // If it is an https connection, you need to configure the certificate, or ignore the certificate(.ignoreSSL(true))
                      .x509TrustManagers(new X509TrustManager[]{})
                      .keyManagers(new KeyManager[]{})
                      .ignoreSSL(false)
                      .build();*/
      
              // Configure Credentials authentication information, including ak, secret, token
              StaticCredentialProvider provider = StaticCredentialProvider.create(Credential.builder()
                      // Please ensure that the environment variables ALIBABA_CLOUD_ACCESS_KEY_ID and ALIBABA_CLOUD_ACCESS_KEY_SECRET are set.
                      .accessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"))
                      .accessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"))
                      //.securityToken(System.getenv("ALIBABA_CLOUD_SECURITY_TOKEN")) // use STS token
                      .build());
      
              // Configure the Client
              AsyncClient client = AsyncClient.builder()
                      .region("<Your RegionId>") // Region ID
                      //.httpClient(httpClient) // Use the configured HttpClient, otherwise use the default HttpClient (Apache HttpClient)
                      .credentialsProvider(provider)
                      //.serviceConfiguration(Configuration.create()) // Service-level configuration
                      // Client-level configuration rewrite, can set Endpoint, Http request parameters, etc.
                      .overrideConfiguration(
                              ClientOverrideConfiguration.create()
                                        // The service endpoint. Refer to https://api.alibabacloud.com/product/live.
                                      .setEndpointOverride("live.aliyuncs.com")
                              //.setConnectTimeout(Duration.ofSeconds(30))
                      )
                      .build();
      
              // Parameter settings for API request
              BatchSetLiveDomainConfigsRequest batchSetLiveDomainConfigsRequest = BatchSetLiveDomainConfigsRequest.builder()
                      .domainNames("<Your DomainNames>")
                      .functions("<Your Functions>")
                      // Request-level configuration rewrite, can set Http request parameters, etc.
                      // .requestConfiguration(RequestConfiguration.create().setHttpHeaders(new HttpHeaders()))
                      .build();
      
              // Asynchronously get the return value of the API request
              CompletableFuture<BatchSetLiveDomainConfigsResponse> response = client.batchSetLiveDomainConfigs(batchSetLiveDomainConfigsRequest);
              // Synchronously get the return value of the API request
              BatchSetLiveDomainConfigsResponse resp = response.get();
              System.out.println(new Gson().toJson(resp));
              // Asynchronous processing of return values
              /*response.thenAccept(resp -> {
                  System.out.println(new Gson().toJson(resp));
              }).exceptionally(throwable -> { // Handling exceptions
                  System.out.println(throwable.getMessage());
                  return null;
              });*/
      
              // Finally, close the client
              client.close();
          }
      
      }
      Nota
      • Neste exemplo, DomainNames especifica o domínio de streaming. Endereços IP no bloco CIDR 127.0.0.0/24 são adicionados à lista de permissões.

      • Para obter informações sobre o SDK de servidor para Java, consulte Usar o SDK de servidor para Java.

  • Observações de uso

    Importante
    • As listas de bloqueios e de permissões são mutuamente exclusivas.

    • É possível adicionar até 3.000 endereços IPv4 ou 1.000 endereços IPv6. Endereços IPv6 não diferenciam maiúsculas de minúsculas e devem usar notação completa.