Todos os produtos
Search
Central de documentação

Object Storage Service:Include a V1 signature in a URL

Última atualização: Aug 24, 2026

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.

Importante

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

OSSV1Signer.java

Java

PHP

SignerV1.php

PHP

Node.js

signatureUrl.js

Node.js

Browser.js

Browser.js

Python

auth.py

Python

Android

ObjectURLPresigner.java

Android

iOS

OSSClient.m

iOS

Go

v1.go

Go

C++

SignerV1.cc

C++

C

oss_auth.c

C

.Net

OssClient.cs

.NET

Ruby

bucket.rb

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.

    Nota

    Por 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-MD5 e CanonicalizedOSSHeaders, 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.

    Nota

    Para 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 de X-Forwarded-For será usado para validar a assinatura.

    Os valores válidos são:

    • true: Permite requisições encaminhadas.

      Importante

      Definir 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.