Este guia explica como gerar um token e os campos obrigatórios e opcionais para tokens.
Para criar um token, compõe uma string para assinar, a que nos referimos como um valor assinado neste guia. O valor assinado inclui parâmetros que descrevem o conteúdo que está a proteger, a hora de validade do valor assinado e assim sucessivamente.
Usa o valor assinado ao criar uma string de token. Cria uma string de token ao compor os parâmetros do token, como um código de autenticação de mensagens (HMAC) baseado em hash de chave simétrica do valor assinado.
A RFC usa o token composto final para ajudar a proteger o seu conteúdo.
Crie um símbolo
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 todos os parâmetros com o caráter 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 os campos de token opcionais. Separe cada campo e todos os parâmetros com um caráter til
~
.Ao compor o token, os valores de cada um dos parâmetros são os mesmos entre o valor assinado e a string do token, com as seguintes exceções:
FullPath
Headers
O seguinte exemplo de código mostra como criar um token de forma programática:
Python
Para se autenticar na RFC de multimédia, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para um ambiente de desenvolvimento local.
Java
Para se autenticar na RFC de multimédia, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para um ambiente de desenvolvimento local.
As secções seguintes descrevem os campos usados pelos tokens.
Campos de token obrigatórios
Os seguintes campos são obrigatórios para cada token:
Expires
- Uma das seguintes opções:
PathGlobs
URLPrefix
FullPath
- Uma das seguintes opções:
Signature
hmac
Salvo especificação em contrário, os nomes dos parâmetros e os respetivos valores são sensíveis a maiúsculas e minúsculas.
A tabela seguinte explica cada parâmetro:
Nome do campo / aliases | Parâmetros de tokens | Valor assinado |
---|---|---|
|
Segundos inteiros decorridos desde o início da época Unix (1970-01-01T00:00:00Z) | Expires=EXPIRATION_TIME , após o qual o token deixa de ser válido. |
|
Uma lista de até cinco segmentos de caminho aos quais conceder acesso. Os segmentos podem ser delimitados por vírgulas (
Os parâmetros de caminho, indicados com pontos e vírgulas ( Por estes motivos, certifique-se de que o URL não contém os seguintes carateres especiais: |
PathGlobs=PATHS |
URLPrefix |
Um URL codificado em base64 seguro para a Web, incluindo o protocolo
Por exemplo, alguns valores 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 |
Nenhum. Quando especificar FullPath num token, não duplique
o caminho que especificou no valor assinado. Num token, inclua o nome do campo sem = . |
FullPath=FULL_PATH_TO_OBJECT |
Signature |
Uma versão codificada em Base64 segura para a Web da assinatura. | Não aplicável |
hmac |
Uma versão codificada em Base64 segura para a Web do valor HMAC. | Não aplicável |
Sintaxe de carateres universais do PathGlobs
A tabela seguinte explica a sintaxe do caráter universal PathGlobs
.
Operador | Correspondências | Exemplos |
---|---|---|
* (asterisco) |
Corresponde a zero ou mais carateres no caminho do URL, incluindo carateres de barra (/ ).
|
|
? (ponto de interrogação) |
Corresponde a um único caráter no caminho do URL, não incluindo carateres de barra (/ ).
|
/videos/s?main.m3u8 correspondências
/videos/s1main.m3u8 . Não corresponde a nenhuma das opções: /videos/s01main.m3u8 ou /videos/s/main.m3u8 .
|
Os globais têm de começar com um asterisco (*
) ou uma barra (/
)
para caminhos de URLs.
Uma vez que *
e /*
correspondem a todos os caminhos de URL, não recomendamos
a utilização de nenhum deles nos seus tokens assinados. Para máxima proteção,
certifique-se de que os seus globs correspondem ao conteúdo ao qual pretende conceder acesso.
Campos de token opcionais
Salvo especificação em contrário, os nomes dos parâmetros e os respetivos valores são sensíveis a maiúsculas e minúsculas.
A tabela seguinte explica os nomes dos parâmetros, os eventuais alias e os detalhes dos parâmetros opcionais:
Nome do campo / aliases | Parâmetros | Valor assinado |
---|---|---|
|
Segundos inteiros desde o início da é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 este 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", especifica
Os IPRanges podem não ser úteis 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 frontend da sua aplicação é diferente do caminho de entrega.
A RFC de multimédia rejeita clientes com um código Seguem-se casos que podem resultar na rejeição de clientes pela RFC de multimédia com um código
Todos estes 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 de ter emitido o acesso e o cliente tentar transferir um segmento de vídeo para o respetivo buffer de reprodução, recebe um |
IPRanges=BASE_64_IP_RANGES |
|
Uma string arbitrária, útil para a análise de registos ou o rastreio de reprodução. Para evitar a criação de um token inválido, use strings com codificação em percentagem ou com codificação base64 segura para a Web. Não pode usar os seguintes carateres para |
SessionID=SESSION_ID_VALUE |
|
Uma string arbitrária, útil para a análise de registos. Para evitar a criação de um token inválido, use strings com codificação em percentagem ou com codificação base64 segura para a Web. Não pode usar os seguintes carateres para |
data=DATA_VALUE |
Headers |
Uma lista de nomes de campos de cabeçalho delimitada por vírgulas. Os nomes dos cabeçalhos não são sensíveis a maiúsculas e minúsculas para as pesquisas no pedido. Os nomes dos cabeçalhos nos valores assinados são sensíveis a maiúsculas e minúsculas. Se um cabeçalho estiver em falta, o valor é a string vazia. Se existirem várias cópias de um cabeçalho, estas são concatenadas com vírgulas. | Headers=HEADER_1_NAME=HEADER_1_EXPECTED_VALUE,
HEADER_2_NAME=HEADER_2_EXPECTED_VALUE |
Exemplos
As secções seguintes mostram exemplos de geração de tokens.
Exemplo de utilização de FullPath
Considere o seguinte exemplo com o campo FullPath
:
- Item pedido:
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.
Seguem-se exemplos de tokens criados a partir de um valor assinado:
Assinatura Ed25519
Expires=160000000~FullPath~Signature=SIGNATURE_OF_SIGNED_VALUE
Onde 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
Onde 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 a partir do caminho especificado no valor assinado. Isto permite-lhe assinar o caminho completo do pedido sem duplicar o pedido no token.
Exemplo de utilização de URLPrefix
Considere o seguinte exemplo com o campo URLPrefix
:
- Item pedido:
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 pedido,
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.
Seguem-se exemplos de tokens criados a partir de um valor assinado:
Assinatura Ed25519
Expires=160000000~URLPrefix=aHR0cDovL2V4YW1wbGUuY29tL3R2L215LXNob3cvczAxL2UwMS9wbGF5bGlzdC5tM3U4~Signature=SIGNATURE_OF_SIGNED_VALUE
Onde 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
Onde HMAC_OF_SIGNED_VALUE é o HMAC de chave simétrica do valor assinado criado anteriormente.
Exemplo de utilização de Headers
Considere o seguinte exemplo com o campo Headers
:
- Item pedido:
http://example.com/tv/my-show/s01/e01/playlist.m3u8
- Tempo de expiração: 160000000
- Valor de PathGlobs:
*
- Cabeçalhos do pedido 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 um HMAC de chave simétrica.
Seguem-se exemplos de tokens criados a partir de um valor assinado:
Assinatura Ed25519
Expires=160000000~PathGlobs=*~Headers=user-agent,accept~Signature=SIGNATURE_OF_SIGNED_VALUE
Onde 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
Onde 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 dos cabeçalhos esperados não são repetidos a partir do valor assinado. Isto permite-lhe assinar pares de chave-valor de cabeçalho de pedido específicos sem duplicar os valores no token.