Este guia explica como gerar um token e as etapas obrigatórias e para tokens.
Para criar um token, escreva uma string a ser assinada, que chamamos de usuário valor neste guia. O valor assinado inclui parâmetros que descrevem conteúdo protegido, o tempo de expiração do valor assinado, e para a frente.
Você usa o valor assinado ao criar uma string de token. Você cria uma string de token compondo os parâmetros do token, como um código de autenticação de mensagem baseado em hash de chave simétrica (HMAC) do .
O Media CDN usa o token composto final para ajudar a proteger conteúdo.
Criar um token
Crie um valor assinado concatenando uma string que contém o campos de token obrigatórios e token opcional opcional . Separe cada campo e quaisquer parâmetros com um caractere til
~
.Assine o valor assinado com uma assinatura Ed25519 ou uma chave simétrica HMAC (link em inglês).
Componha o token concatenando uma string que contém o token campos de token e campos de token opcionais. Separe cada campo com um caractere til
~
.Ao compor o token, os valores de cada parâmetro são os entre o valor assinado e a string do token, com o seguinte exceções:
FullPath
Headers
O exemplo de código a seguir mostra como criar um token de maneira programática:
Python
Para autenticar no Media CDN, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.
Java
Para autenticar no Media CDN, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.
As seções a seguir descrevem os campos usados pelos tokens.
Campos de token obrigatórios
Os campos a seguir são obrigatórios para cada token:
Expires
- Uma das seguintes opções:
PathGlobs
URLPrefix
FullPath
- Uma das seguintes opções:
Signature
hmac
A menos que especificado de outra forma, os nomes dos parâmetros e seus valores diferenciam maiúsculas de minúsculas.
A tabela a seguir explica cada parâmetro:
Nome / aliases do campo | Parâmetros de token | Valor assinado |
---|---|---|
|
Segundos inteiros que passaram desde a época do Unix (1970-01-01T00:00:00Z) | Expires=EXPIRATION_TIME . Depois disso,
token não é mais válido. |
|
Uma lista de até cinco segmentos de caminho aos quais conceder acesso. Os segmentos
pode ser delimitado por vírgulas (
Os parâmetros de caminho, indicados com o uso de ponto e vírgula ( Por esses motivos, seu URL não pode conter os seguintes
caracteres especiais: |
PathGlobs=PATHS |
URLPrefix |
Um URL codificado em base64 seguro para a Web que inclui o protocolo
Por exemplo, alguns valores de URLPrefix válidos para "https://example.com/foo/bar.ts" são "https://example.com", "https://example.com/foo" e "https://example.com/foo/bar". |
URLPrefix=BASE_64_URL_PREFIX |
FullPath |
Nenhuma. Ao especificar FullPath em um token, não duplique
o caminho especificado no valor assinado. Em um token, inclua o campo
sem = . |
FullPath=FULL_PATH_TO_OBJECT |
Signature |
Uma versão da assinatura codificada em base64 e segura para a Web. | Não aplicável |
hmac |
Uma versão codificada em base64 segura para a Web do valor HMAC. | Não aplicável |
Sintaxe de caractere curinga PathGlobs
A tabela a seguir explica a sintaxe de caractere curinga PathGlobs
.
Operador | Corresponde a | Exemplos |
---|---|---|
* (asterisco) |
Corresponde a zero ou mais caracteres no caminho do URL, incluindo
(/ ).
|
|
? (ponto de interrogação) |
Corresponde a um único caractere em
o caminho do URL, sem incluir a barra (/ )
caracteres.
|
/videos/s?main.m3u8 correspondências
/videos/s1main.m3u8 . Ele não corresponde a nenhum dos
/videos/s01main.m3u8 ou /videos/s/main.m3u8 .
|
Os Globs precisam começar com um asterisco (*
) ou uma barra (/
)
para caminhos de URL.
Como *
e /*
correspondem a todos os caminhos de URL, não recomendamos
usando qualquer um dos seus tokens assinados. Para máxima proteção,
verifique se os globs correspondem ao conteúdo ao qual você pretende conceder acesso.
Campos de token opcionais
A menos que especificado de outra forma, os nomes dos parâmetros e seus valores diferenciam maiúsculas de minúsculas.
A tabela a seguir explica nomes de parâmetros, eventuais aliases e detalhes dos parâmetros opcionais:
Nome / aliases do campo | Parâmetros | Valor assinado |
---|---|---|
|
Segundos inteiros desde a época do Unix (1970-01-01T00:00:00Z) | Starts=START_TIME |
IPRanges |
Uma lista de até cinco endereços IPv4 e IPv6 no formato CIDR para
em que o URL é válido no formato base64 seguro para a Web. Por exemplo:
para especificar os intervalos de IP "192.6.13.13/32,193.5.64.135/32", especifique
Pode não ser útil incluir IPRanges em tokens quando os clientes estão
correndo risco de migrações de WAN ou casos em que o caminho de rede
front-end do aplicativo é diferente do caminho de entrega.
O Media CDN rejeita clientes com um Confira a seguir casos que podem resultar no Media CDN
Rejeite clientes com um código
Todos esses fatores podem contribuir para que um determinado cliente
um endereço IP não determinista durante uma sessão de reprodução de vídeo. Se o
o endereço IP do cliente for alterado depois que você conceder acesso, e o
o cliente tenta baixar um trecho de vídeo nos vídeos
buffer, eles recebem um |
IPRanges=BASE_64_IP_RANGES |
|
String arbitrária, útil para análise ou reprodução de registros. o rastreamento de dados. Para evitar a criação de um token inválido, use a codificação % ou um token seguro para a Web
strings codificadas em base64. Os caracteres a seguir não devem ser usados para
|
SessionID=SESSION_ID_VALUE |
|
Uma string arbitrária, útil para análise de registros. Para evitar a criação de um token inválido, use a codificação % ou um token seguro para a Web
strings codificadas em base64. Os caracteres a seguir não devem ser usados para
|
data=DATA_VALUE |
Headers |
Uma lista delimitada por vírgulas de nomes de campos de cabeçalho. Os nomes de cabeçalho são não diferencia maiúsculas de minúsculas para as pesquisas feitas na solicitação. Os nomes de cabeçalho na versão diferenciam maiúsculas de minúsculas. Se um cabeçalho estiver ausente, o valor será o fio. Se houver várias cópias de um cabeçalho, elas serão concatenados por vírgula. | Headers=HEADER_1_NAME=HEADER_1_EXPECTED_VALUE,
HEADER_2_NAME=HEADER_2_EXPECTED_VALUE |
Exemplos
As seções a seguir mostram exemplos para gerar tokens.
Exemplo de uso de FullPath
Considere o exemplo a seguir usando o campo FullPath
:
- Item solicitado:
http://example.com/tv/my-show/s01/e01/playlist.m3u8
- Tempo de expiração: 16.000.000
O valor assinado é:
Expires=160000000~FullPath=/tv/my-show/s01/e01/playlist.m3u8
Para criar um token, assine o valor assinado com uma assinatura Ed25519 ou com uma chave simétrica para HMAC.
Confira a seguir exemplos de tokens criados com um valor assinado:
Assinatura Ed25519
Expires=160000000~FullPath~Signature=SIGNATURE_OF_SIGNED_VALUE
Em que SIGNATURE_OF_SIGNED_VALUE é a assinatura ED25519 da valor assinado criado anteriormente.
HMAC de chave simétrica
Expires=160000000~FullPath~hmac=HMAC_OF_SIGNED_VALUE
Em que HMAC_OF_SIGNED_VALUE é o HMAC de chave simétrica do anterior.
Nos exemplos anteriores, FullPath
é fornecido no token, mas o valor
não é repetido a partir do caminho especificado no valor assinado. Isso permite que você
assinar o caminho completo da solicitação sem duplicá-la no token.
Exemplo de uso de URLPrefix
Considere o exemplo a seguir usando o campo URLPrefix
:
- Item solicitado:
http://example.com/tv/my-show/s01/e01/playlist.m3u8
- Tempo de expiração: 16.000.000
O valor assinado é:
Expires=160000000~URLPrefix=aHR0cDovL2V4YW1wbGUuY29tL3R2L215LXNob3cvczAxL2UwMS9wbGF5bGlzdC5tM3U4
No exemplo anterior, substituímos o caminho para o item solicitado,
http://example.com/tv/my-show/s01/e01/playlist.m3u8
pelo caminho para o item.
em formato Base64 seguro para a Web,
aHR0cDovL2V4YW1wbGUuY29tL3R2L215LXNob3cvczAxL2UwMS9wbGF5bGlzdC5tM3U4
.
Para criar um token, assine o valor assinado com uma assinatura Ed25519 ou com uma chave simétrica para HMAC.
Confira a seguir exemplos de tokens criados com um valor assinado:
Assinatura Ed25519
Expires=160000000~URLPrefix=aHR0cDovL2V4YW1wbGUuY29tL3R2L215LXNob3cvczAxL2UwMS9wbGF5bGlzdC5tM3U4~Signature=SIGNATURE_OF_SIGNED_VALUE
Em que SIGNATURE_OF_SIGNED_VALUE é a assinatura ED25519 da valor assinado criado anteriormente.
HMAC de chave simétrica
Expires=160000000~URLPrefix=aHR0cDovL2V4YW1wbGUuY29tL3R2L215LXNob3cvczAxL2UwMS9wbGF5bGlzdC5tM3U4~hmac=HMAC_OF_SIGNED_VALUE
Em que HMAC_OF_SIGNED_VALUE é o HMAC de chave simétrica do anterior.
Exemplo de uso de Headers
Considere o exemplo a seguir usando o campo Headers
:
- Item solicitado:
http://example.com/tv/my-show/s01/e01/playlist.m3u8
- Tempo de expiração: 16.000.000
- Valor de PathGlobs:
*
- Cabeçalhos de solicitação esperados:
user-agent: browser
accept: text/html
O valor assinado é:
Expires=160000000~PathGlobs=*~Headers=user-agent=browser,accept=text/html
Para criar um token, assine o valor assinado com uma assinatura Ed25519 ou com uma chave simétrica para HMAC.
Confira a seguir exemplos de tokens criados com um valor assinado:
Assinatura Ed25519
Expires=160000000~PathGlobs=*~Headers=user-agent,accept~Signature=SIGNATURE_OF_SIGNED_VALUE
Em que SIGNATURE_OF_SIGNED_VALUE é a assinatura ED25519 da valor assinado criado anteriormente.
HMAC de chave simétrica
Expires=160000000~PathGlobs=*~Headers=user-agent,accept~hmac=HMAC_OF_SIGNED_VALUE
Em que HMAC_OF_SIGNED_VALUE é o HMAC de chave simétrica do anterior.
Nos exemplos anteriores, Headers=user-agent,accept
é fornecido no token.
mas os valores de cabeçalho esperados não são repetidos a partir do valor assinado. Isso permite
você assina pares de chave-valor do cabeçalho de solicitação específicos sem duplicar os valores;
no token.