Todos os produtos
Search
Central de documentação

Object Storage Service:Include a V1 signature in a URL

Última atualização: Sep 24, 2026

Você pode autorizar requisições gerando uma URL pré-assinada. Uma URL pré-assinada é uma alternativa ao uso do campo Authorization no cabeçalho de uma requisição HTTP. Ela contém uma assinatura e outras informações necessárias para a requisição. Esse método permite conceder acesso temporário a recursos do Object Storage Service (OSS) a terceiros por um período determinado, 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 pelo SDK

Os SDKs do OSS implementam assinaturas V1 automaticamente. Não é necessário gerenciar assinaturas ao usar um SDK do OSS. Para entender a implementação de assinatura em uma linguagem específica, consulte o código-source do SDK. A tabela a seguir lista os arquivos que implementam a assinatura em 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 URL expirar. Avalie os riscos antes de adotar esse método.

  • O OSS não oferece suporte à inclusão de assinaturas simultaneamente na URL e no cabeçalho da requisição.

  • É possível gerar uma URL pré-assinada para uma operação PUT a fim de garantir que o conteúdo correto seja enviado. Quando um SDK pré-assina uma requisição, ele calcula o checksum MD5 do corpo da requisição e o inclui na URL pré-assinada. O usuário deve fazer upload de conteúdo cujo checksum MD5 corresponda ao 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****

    Ao 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 VPC ID à 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

    O AccessKey ID usado na assinatura da URL.

    Expires

    Number

    Sim

    O tempo de expiração da URL no formato . O Unix time representa o número de segundos decorridos desde 00:00:00 UTC em 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 o horário atual for 1141889060 e você quiser crie uma URL que expire em 60 segundos, defina Expires como 1141889120.

    Nota

    Por 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 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

    As informações de 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 de assinatura em uma URL é semelhante ao algoritmo de inclusão de assinatura no cabeçalho, válido para todas as requisições e parâmetros de cabeçalho suportados pelo OSS.

    • Ao calcular a string de assinatura a ser adicionada a uma URL, os cabeçalhos definidos em signature V1 — como CONTENT-TYPE, CONTENT-MD5 e CanonicalizedOSSHeaders — são os mesmos usados para calcular a assinatura adicionada ao cabeçalho Authorization. Contudo, substitua o parâmetro Date pelo parâmetro Expires na string de assinatura. O cabeçalho Date pode ser incluído na requisição, mas não precisa constar na string de assinatura.

    • Aplique URL encoding à assinatura ao incluí-la na URL. Se Signature, Expires ou OSSAccessKeyId aparecerem mais de uma vez na URL, o primeiro valor será utilizado.

    • Quando uma URL assinada é utilizada, o OSS verifique primeiro se o horário da requisição é posterior ao tempo definido em Expires e, em seguida, valida a assinatura.

    security-token

    String

    Não

    O token de segurança. Defina este parâmetro somente 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 STS AssumeRole ou usando o STS SDKs for different languages. As credenciais 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 é usado apenas durante a geração da assinatura. Não é necessário incluí-lo na URL.

    • Ao adicionar um endereço IP ou intervalo de endereços IP na geração da assinatura, passe também o parâmetro x-oss-ac-subnet-mask para especifique a máscara de sub-rede.

    x-oss-ac-subnet-mask

    Number

    Não

    O número de bits 1 na máscara de sub-rede. Se a requisição incluir este parâmetro, o OSS realizará 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 é usado para verifique a assinatura. Caso este parâmetro seja adulterado, a validação da assinatura falhará.

    x-oss-ac-vpc-id

    String

    Não

    Especifique o VPC ID. Após defina este parâmetro, o OSS verifique se a requisição é originada do VPC ID correspondente. Se a requisição vier do VPC ID especificado e este parâmetro estiver definido, o OSS validará tanto o VPC ID quanto o endereço IP de source ou o intervalo de endereços IP.

    x-oss-ac-forward-allow

    Boolean

    Não

    Indica se requisições encaminhadas são permitidas. Quando o OSS detecta este campo e a requisição contém X-Forwarded-For — que pode conter múltiplos endereços IP —, o OSS usa o valor de X-Forwarded-For para validar a assinatura.

    Os valores válidos são:

    • true: Permite requisições encaminhadas.

      Importante

      Defina este valor como true cria o risco de o cabeçalho da requisição ser adulterado ou interceptado.

    • false (padrão): Não permite requisições encaminhadas.

  • Código Python de exemplo para assinatura (incluindo apenas os 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. Não há exigência de ordem específica entre eles.

AccessDenied

403 Forbidden

A requisição foi recebida após o tempo especificado no parâmetro Expires, ou o formato do 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 estão incluídas no cabeçalho de requisição Authorization.