A assinatura de URL protege os recursos do seu site contra downloads não autorizados e hotlinking. Este tópico descreve como a assinatura do tipo A funciona no CDN do Alibaba Cloud e fornece um exemplo.
Como funciona
-
Estrutura de uma URL assinada do tipo A
http://DomainName/Filename?auth_key={<timestamp>-rand-uid-<md5hash>}NotaO conteúdo entre
{}é a informação de assinatura adicionada à URL padrão. -
Descrição dos campos
Campo
Descrição
DomainName
O nome de domínio do seu site CDN.
Filename
A URL para a busca real na origem. O Filename deve começar com uma barra (
/).auth_key
A informação de assinatura, composta por timestamp, rand, uid e md5hash.
timestamp
O momento em que o servidor de assinatura gera a URL assinada. Esse valor e o Validity Period of Signed URL determinam juntos quando a URL assinada expira. O valor é um timestamp UNIX de 10 dígitos que representa o número de segundos decorridos desde 00:00:00 de 1º de janeiro de 1970.
NotaConfigure o TTL no console Configure URL Signing. A URL assinada expira em
timestamp+ o período de validade configurado.rand
Um número aleatório. Defina como um UUID sem hífens (-), por exemplo, 477b3bbc253f467b8def6711128c7bec.
uid
ID do usuário. Este campo não é utilizado. Defina como 0.
md5hash
Uma string de 32 caracteres calculada com o algoritmo MD5, composta por dígitos e letras minúsculas.
Método de cálculo:
sstring = "URI-Timestamp-rand-uid-PrivateKey" (URI is the relative path of the requested object, such as /Filename, and does not include parameters.) md5hash = md5sum(sstring) -
Lógica de autenticação
Quando um servidor CDN recebe uma solicitação de recurso, ele verifica se
timestamp+período de validade da URL assinadaé anterior à hora atual.-
Se
timestamp+período de validade da URL assinadafor anterior à hora atual, a URL assinada expirou e o servidor retorna um erro HTTP 403. -
Se
timestamp+período de validade da URL assinadafor posterior à hora atual, o servidor constrói uma string no formatosstring(consulte o formatosstringna tabela). Em seguida, calcula o valormd5hashcom o algoritmo MD5 e compara o valormd5hashcalculado com o valormd5hashna solicitação do usuário.-
Se os valores coincidirem, a autenticação será bem-sucedida e o recurso será retornado.
NotaApós a autenticação bem-sucedida, os parâmetros de assinatura são removidos da URL. Isso melhora a taxa de acerto de cache e reduz o tráfego de volta à origem. Por exemplo:
-
URL com parâmetros de assinatura:
http://DomainName/Filename?auth_key={<timestamp>-rand-uid-<md5hash>} -
Após a autenticação bem-sucedida:
-
Formato de URL usado para gerar a chave de cache:
http://DomainName/FileName -
Formato de URL para a busca real na origem:
http://DomainName/FileName
-
-
-
Se os valores não coincidirem, a autenticação falha e um erro HTTP 403 é retornado.
-
-
Exemplo de URL assinada
O exemplo a seguir demonstra a assinatura do tipo A.
-
Condições do exemplo
-
Objeto da solicitação de origem:
http://domain.example.com/video/standard/test.mp4NotaSe a URL da solicitação contiver caracteres não ASCII, você deve codificar a URL primeiro. Use a URL codificada para construir a string de hash. Por exemplo:
-
URL original:
https://example.com/image/AlibabaCloud.jpg -
URL codificada:
https://example.com/image/%E9%98%BF%E9%87%8C%E4%BA%91.jpg
-
-
A chave está definida como: aliyuncdnexp1234.
-
O servidor de assinatura gera a URL assinada às 08:00:00 de 10 de outubro de 2015 (UTC+8), que corresponde ao valor inteiro decimal 1444435200.
-
-
Processo de concatenação
-
O servidor CDN constrói uma string para calcular o hash do
md5hash./video/standard/test.mp4-1444435200-0-0-aliyuncdnexp1234 -
Com base nessa string, o servidor CDN calcula o
md5hash.md5hash = md5sum("/video/standard/test.mp4-1444435200-0-0-aliyuncdnexp1234") = 23bf85053008f5c0e791667a313e28ce -
Gere a URL assinada.
http://domain.example.com/video/standard/test.mp4?auth_key=1444435200-0-0-23bf85053008f5c0e791667a313e28ce
-
Quando um cliente solicita um recurso usando a URL assinada, o servidor CDN calcula um valor md5hash e o compara com o valor md5hash na solicitação (23bf85053008f5c0e791667a313e28ce). Se os valores coincidirem e a URL assinada não tiver expirado, a autenticação será bem-sucedida. Caso contrário, a autenticação falha.