Autorize solicitações gerando uma URL pré-assinada. Essa URL é uma alternativa ao campo Authorization no cabeçalho de solicitação HTTP e contém a assinatura e outras informações necessárias. Esse método permite conceder acesso temporário a recursos do Object Storage Service (OSS) para terceiros por um período específico, sem expor suas credenciais de acesso. Este tópico descreve como incluir uma assinatura V1 em uma URL.
O OSS oferece suporte ao algoritmo de assinatura V4, mais seguro. Utilize assinaturas V4 para obter maior segurança. Para obter mais informações, consulte Assinaturas V4.
Implementação de assinatura via SDK
Os SDKs do OSS implementam assinaturas V1 automaticamente. Portanto, não é necessário manipular assinaturas manualmente ao utilizar um SDK do OSS. Para compreender os detalhes da implementação em uma linguagem específica, consulte o código source do SDK. A tabela a seguir lista os arquivos responsáveis pela implementação da assinatura em cada SDK.
|
SDK |
Implementação da assinatura |
Exemplo de uso |
|
Java |
||
|
PHP |
||
|
Node.js |
||
|
Browser.js |
||
|
Python |
||
|
Android |
||
|
iOS |
||
|
Go |
||
|
C++ |
||
|
C |
||
|
.Net |
||
|
Ruby |
Observações de uso
Ao utilizar uma URL assinada, os dados autorizados ficam expostos na internet até que a URL expire. Avalie os riscos antes de adotar esse método.
O OSS não permite incluir assinaturas simultaneamente na URL e no cabeçalho da solicitação.
Gere uma URL pré-assinada para operações PUT a fim de garantir o upload correto do conteúdo. Quando um SDK pré-assina uma solicitação, ele calcula o checksum MD5 do corpo da requisição e o inclui na URL. O usuário deve enviar um conteúdo cujo checksum MD5 corresponda exatamente ao valor presente na URL pré-assinada; caso contrário, a operação falhará. Para validar o MD5, adicione o cabeçalho Content-MD5 à solicitação.
Implementação da assinatura
-
Exemplo de assinatura
https://examplebucket.oss-cn-hangzhou.aliyuncs.com/oss-api.pdf?OSSAccessKeyId=nz2p***********&Expires=1141889120&Signature=****Pxyb****mGa%****272YEAiv****Se você utilizar um usuário do Security Token Service (STS) para construir uma URL assinada, inclua o parâmetro
security-token.https://examplebucket.oss-cn-hangzhou.aliyuncs.com/oss-api.pdf?OSSAccessKeyId=nz2p***********&Expires=1141889120&Signature=****Pxyb****mGa%****272YEAiv****&security-token=CAIS****q6Ft5B2yfSjIr****Oz31blR9oWmWBf****DR/xm3Imc****IHxMdHJsCeAcs/Q0lGFR5/sflqJIR****EvCUcZr8szfWcsZos2****u5Jko1be0ewHKeQKZsebWZ+LmNpy/Ht6md1HDkAJq3LL+bk/Mdle5MJqP+/kFC9MMRVuAcCZhDtVbLRcYgq18D3bKMuu3ORPHm3fZCFES2jBxkmRi86+ysIP+phPVlw/90fRH5dazcJW0Zsx0OJo6Wcq+3+FqM6DQlTNM6hwNtoUO1fYUommb54nDXwQIvUjfbtC5qIM/cFVLAYEhAL****TGkvl1h/fejYyfyW****kFCHiPF****JCUSbr4a4sjF6zyPnPWycyCLYXleLzhxPWd/2kagAGaXG69BqwYNvrKKI3W8****bNc1wQDMXQfiHpFCRG6lYhh3****pwH90A3sTlxzRGvi8+****JwrluOHWs+Fj6S6s0cOhKvKRWYE8UuWeXIvv4l6DAGwH****LjLC11f5prUJ****b+3hwuBod32Jx+us/1p996Glao725orcb****Adicione um endereço IP específico, um intervalo de endereços IP ou um ID de VPC à URL assinada para impedir que clientes não autorizados acessem recursos do OSS.
https://examplebucket.oss-cn-hangzhou.aliyuncs.com/oss-api.pdf?&OSSAccessKeyId=44CF****************&Expires=1475462111&Signature=77Dv****************&x-oss-ac-subnet-mask=32 -
Parâmetros
Nome
Tipo
Obrigatório
Descrição
OSSAccessKeyId
String
Sim
ID da AccessKey utilizada na assinatura da URL.
Expires
Number
Sim
Tempo de expiração da URL no formato de . O tempo Unix representa o número de segundos decorridos desde 00:00:00 UTC de 1º de janeiro de 1970. Se o OSS receber a solicitação após o tempo de expiração, retornará um código de erro de timeout. Por exemplo, se a hora atual for 1141889060 e você desejar criar uma URL que expire em 60 segundos, defina Expires como 1141889120.
NotaPor motivos de segurança, o período de validade padrão de uma URL no console do OSS é de 3.600 segundos. O período máximo permitido é de 32.400 segundos. Para obter mais informações sobre como alterar o tempo de expiração da URL, consulte Usar URLs de arquivo.
Signature
String
Sim
Informações da assinatura. O formato é o seguinte:
Signature = urlencode(base64(hmac-sha1(AccessKeySecret, VERB + "\n" + CONTENT-MD5 + "\n" + CONTENT-TYPE + "\n" + EXPIRES + "\n" + CanonicalizedOSSHeaders + CanonicalizedResource)))-
O algoritmo para assinar uma URL assemelha-se ao algoritmo usado para incluir uma assinatura no cabeçalho, aplicável a todas as solicitações e parâmetros de cabeçalho suportados pelo OSS.
-
Ao calcular a string de assinatura a ser adicionada à URL, os cabeçalhos definidos na assinatura V1, como
CONTENT-TYPE,CONTENT-MD5eCanonicalizedOSSHeaders, são idênticos aos utilizados no cálculo da assinatura do cabeçalho Authorization. No entanto, substitua o parâmetro Date pelo parâmetro Expires na string de assinatura. Embora seja possível incluir o cabeçalho Date na solicitação, ele não precisa constar na string de assinatura. -
Aplique codificação URL na assinatura ao incluí-la na URL. Caso Signature, Expires ou OSSAccessKeyId apareçam múltiplas vezes na URL, apenas o primeiro valor será considerado.
-
Quando uma URL assinada é utilizada, o OSS verifica primeiramente se o horário da solicitação ultrapassou o tempo definido em Expires e, em seguida, valida a assinatura.
security-token
String
Não
Token de segurança. Configure este parâmetro somente ao utilizar um usuário STS para construir a URL assinada.
NotaPara obter mais informações sobre como configurar o serviço STS, consulte Usar credenciais de acesso temporárias do STS para acessar o OSS. Obtenha credenciais de acesso temporárias chamando a operação de API AssumeRole do STS ou utilizando os SDKs do STS para diferentes linguagens. As credenciais de acesso temporárias incluem um par de AccessKey temporário (AccessKey ID e AccessKey Secret) e um token de segurança (SecurityToken).
x-oss-ac-source-ip
String
Não
Especifique o endereço IP ou o intervalo de endereços IP.
Importante-
Este parâmetro é utilizado exclusivamente durante a geração da assinatura. Não é necessário incluí-lo na URL.
-
Caso adicione um endereço IP ou intervalo de IPs ao gerar a assinatura, passe também o parâmetro x-oss-ac-subnet-mask para especificar a máscara de sub-rede.
x-oss-ac-subnet-mask
Number
Não
Quantidade de bits 1 na máscara de sub-rede. Se a solicitação incluir este parâmetro, o OSS executará uma operação AND bit a bit entre o endereço IP real da solicitação e a máscara de sub-rede. O resultado servirá para verificar a assinatura. Qualquer adulteração neste parâmetro causará falha na validação da assinatura.
x-oss-ac-vpc-id
String
Não
Especifique o ID da VPC. Após definir este parâmetro, o OSS verifica se a solicitação se origina da VPC correspondente. Quando a solicitação provém do ID de VPC especificado e este parâmetro está configurado, o OSS valida tanto o ID da VPC quanto o endereço IP de origem ou o intervalo de endereços IP.
x-oss-ac-forward-allow
Boolean
Não
Defina se solicitações encaminhadas são permitidas. Se o OSS detectar este campo e a solicitação contiver
X-Forwarded-For(que pode conter múltiplos endereços IP), o sistema usará o valor deX-Forwarded-Forpara validar a assinatura.Os valores válidos são:
-
true: Permite solicitações encaminhadas.
ImportanteDefinir este valor como true cria o risco de o cabeçalho da solicitação ser adulterado ou sequestrado.
-
false (padrão): Não permite solicitações encaminhadas.
-
-
Código de exemplo em Python para assinatura (incluindo apenas parâmetros obrigatórios)
import base64 import hmac import hashlib from urllib.parse import quote access_key_secret = "yourAccessKeySecret" string_to_sign = "GET\n\n\n1141889120\n/examplebucket/oss-api.pdf" h = hmac.new( access_key_secret.encode('utf-8'), string_to_sign.encode('utf-8'), hashlib.sha1 ) signature = quote(base64.b64encode(h.digest()).decode('utf-8')) print(signature)
Códigos de erro
|
Código de erro |
Mensagem retornada |
Descrição |
|
AccessDenied |
403 Forbidden |
Os parâmetros Signature, Expires e OSSAccessKeyId são obrigatórios. A ordem dos parâmetros não é relevante. |
|
AccessDenied |
403 Forbidden |
A solicitação foi recebida após o horário especificado no parâmetro Expires ou o formato de tempo está incorreto. |
|
InvalidArgument |
400 Bad Request |
Pelo menos um dos parâmetros Signature, Expires ou OSSAccessKeyId está presente na URL e as informações de assinatura também foram incluídas no cabeçalho de solicitação Authorization. |