Autorize requisições gerando uma URL pré-assinada. Essa URL é uma alternativa ao campo Authorization no cabeçalho de requisição HTTP e contém a assinatura e outras informações necessárias. Esse método concede 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, que é mais seguro. Use assinaturas V4 para maior segurança. Para obter mais informações, consulte V4 signatures.
Implementação de assinatura via SDK
Os SDKs do OSS implementam assinaturas V1 automaticamente. Não é necessário gerenciar a assinatura manualmente ao usar um SDK do OSS. Para entender a implementação da assinatura em uma linguagem específica, consulte o código source do SDK. A tabela a seguir lista os arquivos que implementam a assinatura para 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 usar uma URL assinada, os dados autorizados ficam expostos na internet até a expiração da URL. Avalie os riscos antes de adotar esse método.
O OSS não permite incluir assinaturas simultaneamente na URL e no cabeçalho da requisição.
Gere uma URL pré-assinada para operações PUT para garantir o upload correto do conteúdo. Quando um SDK pré-assina uma requisiçã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 ao valor presente na URL pré-assinada; caso contrário, a operação falhará. Para validar o MD5, adicione o cabeçalho Content-MD5 à requisiçã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ê usar 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 usada na assinatura da URL.
Expires
Number
Sim
Tempo de expiração da URL no formato . O Unix time representa o número de segundos decorridos desde 00:00:00 UTC de 1º de janeiro de 1970. Se o OSS receber a requisiçã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ê quiser criar uma URL que expire em 60 segundos, defina Expires como 1141889120.
NotaPor questões 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 de validade é de 32.400 segundos. Para obter mais informações sobre como alterar o tempo de expiração da URL, consulte Use file URLs.
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 é semelhante ao algoritmo usado para incluir uma assinatura no cabeçalho, aplicável a todas as requisições e parâmetros de cabeçalho com suporte no OSS.
-
Ao calcular a string de assinatura a ser adicionada à URL, os cabeçalhos definidos em signature V1, como
CONTENT-TYPE,CONTENT-MD5eCanonicalizedOSSHeaders, são idênticos aos usados para calcular a assinatura adicionada ao cabeçalho Authorization. No entanto, substitua o parâmetro Date pelo parâmetro Expires na string de assinatura. Inclua o cabeçalho Date na requisição se necessário, mas ele não deve fazer parte da string de assinatura. -
Codifique a assinatura com URL-encode ao incluí-la na URL. Caso Signature, Expires ou OSSAccessKeyId sejam passados múltiplas vezes na URL, apenas o primeiro valor será considerado.
-
Quando uma URL assinada é usada, o OSS verifica primeiramente se o horário da requisição ultrapassou o tempo definido em Expires e, em seguida, valida a assinatura.
security-token
String
Não
Token de segurança. Defina este parâmetro apenas ao usar um usuário STS para construir a URL assinada.
NotaPara obter mais informações sobre como configurar o service STS, consulte Use temporary access credentials from STS to access OSS. Obtenha credenciais de acesso temporárias chamando a operação de API AssumeRole do STS ou usando os STS SDKs for different languages. 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
Especifica o endereço IP ou intervalo de endereços IP.
Importante-
Este parâmetro é usado 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 requisição incluir este parâmetro, o OSS executará uma operação AND bit a bit entre o endereço IP real da requisição e a máscara de sub-rede. O resultado será usado 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
Especifica o ID da VPC. Após definir este parâmetro, o OSS verifica se a requisição se origina da VPC correspondente. Se a requisição vier do ID de VPC especificado e este parâmetro estiver configurado, o OSS validará tanto o ID da VPC quanto o endereço IP de origem ou intervalo de IPs.
x-oss-ac-forward-allow
Boolean
Não
Define se requisições encaminhadas são permitidas. Se o OSS detectar este campo e a requisição contiver
X-Forwarded-For(que pode conter múltiplos endereços IP), o valor deX-Forwarded-Forserá usado para validar a assinatura.Os valores válidos são:
-
true: Permite requisições encaminhadas.
ImportanteDefinir este valor como true cria o risco de o cabeçalho da requisição ser adulterado ou sequestrado.
-
false (padrão): Não permite requisiçõ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 requisição foi recebida após o horário especificado no parâmetro Expires ou o formato de hora 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 requisição Authorization. |