Este guia explica como gerar um token e os campos obrigatórios e opcionais para tokens.
Para criar um token, você compõe uma string para assinar, que chamamos de valor assinado neste guia. O valor assinado inclui parâmetros que descrevem o conteúdo que você está protegendo, o tempo de expiração do valor assinado e assim por diante.
Você usa o valor assinado ao criar uma string de token. Para isso, você compõe os parâmetros do token, como um código de autenticação de mensagem baseado em hash (HMAC) de chave simétrica do valor assinado.
O Media CDN usa o token composto final para ajudar a proteger seu conteúdo.
Criar um token
Crie um valor assinado concatenando uma string que contenha os campos de token obrigatórios e os campos de token opcionais desejados. Separe cada campo e parâmetro com um caractere til
~.Assine o valor assinado com uma assinatura Ed25519 ou um HMAC de chave simétrica.
Componha o token concatenando uma string que contenha os campos de token obrigatórios e opcionais. Separe cada campo e parâmetro com um caractere til
~.Ao compor o token, os valores de cada um dos parâmetros são os mesmos entre o valor assinado e a string de token, com as seguintes exceções:
FullPathHeaders
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. Se quiser 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. Se quiser 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- Um dos seguintes:
PathGlobsURLPrefixFullPath
- Um dos seguintes:
Signaturehmac
A menos que especificado de outra forma, os nomes dos parâmetros e os valores deles diferenciam maiúsculas de minúsculas.
A tabela a seguir explica cada parâmetro:
| Nome do campo / aliases | Parâmetros de token | Valor assinado |
|---|---|---|
|
Segundos inteiros que se passaram desde a época Unix (1970-01-01T00:00:00Z) | Expires=EXPIRATION_TIME, após o qual o
token não é mais válido. |
|
Uma lista de até cinco segmentos de caminho para conceder acesso a. Os segmentos
podem ser delimitados por vírgulas (
Os parâmetros de caminho, indicados usando ponto e vírgula ( Por esses motivos, verifique se o URL não contém os seguintes
caracteres especiais: |
PathGlobs=PATHS |
URLPrefix |
Um URL codificado em base64 seguro para a Web, incluindo 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 nome do campo
sem um =. |
FullPath=FULL_PATH_TO_OBJECT |
Signature |
Uma versão codificada em base64 segura para a Web da assinatura. | Não relevante |
hmac |
Uma versão codificada em base64 segura para a Web do valor HMAC. | Não relevante |
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
caracteres de barra (/).
|
|
? (ponto de interrogação) |
Corresponde a um único caractere no
caminho do URL, não incluindo caracteres de barra (/)
.
|
/videos/s?main.m3u8 corresponde a
/videos/s1main.m3u8. Não corresponde a
/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
o uso de nenhum deles nos tokens assinados. Para máxima proteção, verifique se os globs correspondem ao conteúdo a que você pretende conceder acesso.
Campos de token opcionais
A menos que especificado de outra forma, os nomes dos parâmetros e os valores deles diferenciam maiúsculas de minúsculas.
A tabela a seguir explica os nomes dos parâmetros, os aliases e os detalhes dos parâmetros opcionais:
| Nome do campo / aliases | Parâmetros | Valor assinado |
|---|---|---|
|
Segundos inteiros desde a época Unix (1970-01-01T00:00:00Z) | Starts=START_TIME |
IPRanges |
Uma lista de até cinco endereços IPv4 e IPv6 no formato CIDR para
os quais esse 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
IPRanges pode não ser útil para incluir em tokens quando os clientes estão
em risco de migrações de WAN ou casos em que o caminho de rede para o
front-end do aplicativo é diferente do caminho de entrega.
O Media CDN rejeita clientes com um A seguir estão os casos que podem resultar na rejeição de clientes pelo Media CDN
com um código
Todos esses fatores podem contribuir para que um determinado cliente tenha um
endereço IP não determinístico durante uma sessão de reprodução de vídeo. Se o
endereço IP do cliente mudar depois que você tiver emitido o acesso e o
cliente tentar fazer o download de um segmento de vídeo para o buffer de reprodução,
ele receberá um |
IPRanges=BASE_64_IP_RANGES |
|
Uma string arbitrária, útil para análise de registros ou rastreamento de reprodução Para evitar a criação de um token inválido, use strings codificadas em % ou em base64 seguras para a Web. Os caracteres a seguir não podem 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 strings codificadas em % ou em base64 seguras para a Web. Os caracteres a seguir não podem ser usados para
|
data=DATA_VALUE |
Headers |
Uma lista de nomes de campos de cabeçalho delimitada por vírgulas. Os nomes de cabeçalho não diferenciam maiúsculas de minúsculas para pesquisas na solicitação. Os nomes de cabeçalho nos valores assinados diferenciam maiúsculas de minúsculas. Se um cabeçalho estiver ausente, o valor será a string vazia. Se houver várias cópias de um cabeçalho, elas serão concatenadas por vírgulas. | Headers=HEADER_1_NAME=HEADER_1_EXPECTED_VALUE,
HEADER_2_NAME=HEADER_2_EXPECTED_VALUE |
Exemplos
As seções a seguir mostram exemplos de geração de tokens.
Exemplo usando 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: 160000000
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 um HMAC de chave simétrica.
A seguir estão 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 do 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 valor assinado criado anteriormente.
Nos exemplos anteriores, FullPath é fornecido no token, mas o valor não é repetido do caminho especificado no valor assinado. Isso permite assinar o caminho completo da solicitação sem duplicá-la no token.
Exemplo usando 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: 160000000
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 no formato Base64 seguro para a Web, aHR0cDovL2V4YW1wbGUuY29tL3R2L215LXNob3cvczAxL2UwMS9wbGF5bGlzdC5tM3U4.
Para criar um token, assine o valor assinado com uma assinatura Ed25519 ou um HMAC de chave simétrica.
A seguir estão 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 do 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 valor assinado criado anteriormente.
Exemplo usando 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: 160000000
- Valor de PathGlobs:
* - Cabeçalhos de solicitação esperados:
user-agent: browseraccept: 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 um HMAC de chave simétrica.
A seguir estão 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 do 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 valor assinado criado anteriormente.
Nos exemplos anteriores, Headers=user-agent,accept é fornecido no token, mas os valores de cabeçalho esperados não são repetidos do valor assinado. Isso permite assinar pares de chave-valor de cabeçalho da solicitação específicos sem duplicar os valores no token.