Todos os produtos
Search
Central de documentação

Object Storage Service:Include a V4 signature in the Authorization header (recommended)

Última atualização: Sep 24, 2026

Ao iniciar requisições ao OSS, inclua o header de requisição Authorization contendo uma assinatura V4 para garantir a autenticação bem-sucedida. Priorize o uso do SDK fornecido pelo OSS para iniciar requisições, pois o SDK já integra o sofisticado algoritmo de assinatura V4. Somente quando o SDK não puder ser utilizado, consulte esta documentação para implementar manualmente o algoritmo de assinatura V4.

Utilize os SDKs do OSS para implementar assinaturas V4 automaticamente

Para implementar o algoritmo de assinatura V4, recomendamos consultar a implementação de assinatura V4 nos SDKs do OSS.

SDK

Implementation

Java

OSSV4Signer.java

Python

v4.py

Go

v4.go

JavaScript

client.js

PHP

SignerV4.php

C#

SignerV4.cs

Android

OSSV4Signer.java

Swift

SignerV4.swift

Objective-C

OSSV4Signer.m

C++

SignerV4.cc

C

oss_auth.c

Headers de requisição Authorization

Ao iniciar uma requisição ao OSS, implemente a assinatura no header Authorization para verifique a requisição.

A seguir está a sintaxe do header Authorization:

Authorization: OSS4-HMAC-SHA256 Credential=<AccessKeyId>/<SignDate>/<SignRegion>/oss/aliyun_v4_request, AdditionalHeaders=<AdditionalHeadersVal>, Signature=<SignatureVal>

A tabela abaixo descreve os componentes do header Authorization:

Componente

Descrição

OSS4-HMAC-SHA256

Indica o algoritmo usado para calcular a assinatura. Essa string especifica a versão da assinatura e o algoritmo de assinatura (HMAC-SHA256). O valor OSS4-HMAC-SHA256 é obrigatório quando assinaturas V4 são usadas para autenticação.

Credential

Contém o AccessKey ID e o escopo, que inclui a data, a região e o cloud service utilizados para calcular a assinatura. Este campo é obrigatório quando assinaturas V4 são usadas para autenticação.

A sintaxe é a seguinte:

<AccessKeyId>/<SignDate>/<SignRegion>/oss/aliyun_v4_request

Onde:

  • AccessKeyId: Seu AccessKey ID, um identificador único usado para verifique a identidade do solicitante.

  • SignDate: A data da assinatura no formato YYYYMMDD.

  • SignRegion: O region ID usado para a requisição. Exemplo: cn-hangzhou.

  • oss: String fixa que identifica o service solicitado como Alibaba Cloud Object Storage Service (OSS).

  • aliyun_v4_request: String fixa que especifique a versão da assinatura como V4.

AdditionalHeaders

Especifique os headers de requisição opcionais incluídos no cálculo da assinatura (não é necessário especifique os headers obrigatórios que já devem ser incluídos no cálculo). Este campo contém apenas nomes de headers em letras minúsculas, ordenados lexicograficamente e separados por ponto e vírgula (;).

Exemplo:

content-disposition;content-length

Signature

A assinatura calculada. Este campo é obrigatório quando assinaturas V4 são usadas para autenticação.

O exemplo a seguir ilustra um valor de assinatura de 256 bits representado por 64 dígitos hexadecimais em letras minúsculas:

3938**********************************dcdc

Cálculo da assinatura

Após receber uma requisição, o OSS calcula a assinatura e a compara com aquela presente no header de requisição Authorization. Se coincidirem, a requisição é bem-sucedida; caso contrário, ela falha.

Processo de cálculo da assinatura

A figura a seguir ilustra o processo de cálculo da assinatura:

image

O processo de cálculo da assinatura compreende três etapas:

  1. Construir uma canonicalized request: Formate a requisição de acordo com as especificações de assinatura do OSS para gerar uma canonicalized request.

  2. Construir a string-to-sign: Concatene a canonicalized request para derivar a string-to-sign.

  3. Calcular a assinatura: Execute múltiplas operações de hash sobre o AccessKey Secret para gerar uma derived key e, em seguida, use essa chave para calcular o hash HMAC-SHA256 da string-to-sign e obter a assinatura final.

1. Construir uma canonicalized request

A seguir está a sintaxe de uma canonicalized request:

HTTP Verb + "\n" +
Canonical URI + "\n" +
Canonical Query String + "\n" +
Canonical Headers + "\n" +
Additional Headers + "\n" +
Hashed PayLoad

A tabela a seguir descreve os parâmetros de uma canonicalized request:

Parâmetro

Descrição

HTTP Verb

O método de requisição HTTP, incluindo PUT, GET, POST, HEAD, DELETE e OPTIONS.

Canonical URI

Caminho do recurso com codificação URI. O caminho do recurso não inclui a query string, e a codificação de barras (/) não é necessária.

  • Se o alvo da requisição for o OSS, o caminho do recurso é / e o caminho com codificação URI é UriEncode("/").

  • Se o alvo for um bucket, o caminho do recurso é /examplebucket/ e o caminho com codificação URI é UriEncode("/examplebucket/").

  • Se o alvo for um objeto em um bucket, o caminho do recurso é /examplebucket/exampleobject e o caminho com codificação URI é UriEncode("/examplebucket/exampleobject").

Canonical Query String

Parâmetros de query com codificação URI ordenados lexicograficamente.

  • Quando os parâmetros de query incluem tanto nomes quanto valores, codifique separadamente o nome e o valor de cada parâmetro via URI e ordene-os lexicograficamente pelos nomes codificados. A ordenação é feita após a codificação. Use = para conectar o nome e o valor codificados, e & para concatenar parâmetros diferentes.

    • Parâmetros de query: prefix=somePrefix&marker=someMarker&max-keys=20

    • Parâmetros de query canonicalizados:

      UriEncode("marker")+"="+UriEncode("someMarker")+"&"+UriEncode("max-keys")+"="+UriEncode("20")+"&"+UriEncode("prefix")+"="+UriEncode("somePrefix")
  • Se o parâmetro de query contiver apenas o nome do parâmetro, aplique a codificação URI somente ao nome.

    • Parâmetro de query: ?acl

    • Parâmetro de query canonicalizado: UriEncode("acl")

  • Na ausência de parâmetros de query — ou seja, quando o URI da requisição não contém ? — defina a canonicalized query string como uma string vazia ("").

Canonical Headers

A lista de headers da requisição.

Os headers de requisição se dividem em três categorias:

  • Headers que devem existir na requisição e ser incluídos no cálculo da assinatura:

    • x-oss-content-sha256: somente UNSIGNED-PAYLOAD é suportado.

  • Headers que devem ser incluídos no cálculo da assinatura quando presentes na requisição:

    • Content-Type

    • Content-MD5

    • x-oss-*: Outros headers de requisição com prefixo x-oss-. Por exemplo, ao acessar via STS AK, o SecurityToken é informado por meio de x-oss-security-token:security-token. O horário da requisição é descrito por x-oss-date, e a sintaxe deve seguir o formato de tempo padrão ISO8601, como 20231203T121212Z.

  • Headers de requisição opcionais especificados em AdditionalHeaders.

A sintaxe é a seguinte:

Lowercase(<HeaderName1>) + ":" + Trim(<value>) + "\n"
Lowercase(<HeaderName2>) + ":" + Trim(<value>) + "\n"
...
Lowercase(<HeaderNameN>) + ":" + Trim(<value>) + "\n"

Exemplo de código:

content-disposition:attachment
content-length:3
content-md5:ICy5YqxZB1uWSwcVLSNLcA==
content-type:text/plain
x-oss-content-sha256:UNSIGNED-PAYLOAD
x-oss-date:20250328T101048Z

Additional Headers

Especifica os headers de requisição opcionais incluídos no cálculo da assinatura (não é necessário especifique os headers obrigatórios). Este campo contém apenas nomes de headers em letras minúsculas, ordenados lexicograficamente e separados por ponto e vírgula (;), de forma consistente com AdditionalHeaders.

Inclua apenas nomes de headers em letras minúsculas, ordenados lexicograficamente, excluindo os headers obrigatórios. Separe-os por ponto e vírgula (;), de forma consistente com AdditionalHeaders.

Exemplo de código:

content-disposition;content-length

Hashed PayLoad

A representação hexadecimal do hash SHA256 do payload da requisição. Somente o valor UNSIGNED-PAYLOAD é suportado.

2. Construir a string-to-sign

A sintaxe da string-to-sign é a seguinte:

"OSS4-HMAC-SHA256" + "\n" +
TimeStamp + "\n" +
Scope + "\n" +
Hex(SHA256Hash(<CanonicalRequest>))

A tabela a seguir descreve os parâmetros da string-to-sign:

Parâmetro

Descrição

OSS4-HMAC-SHA256

O algoritmo de hash da assinatura; o valor deve ser OSS4-HMAC-SHA256.

TimeStamp

O horário UTC atual, cuja sintaxe deve seguir o padrão ISO8601, como 20250320T083322Z.

Scope

O conjunto de parâmetros para obter a derived key. Esse conjunto especifica a data, a região e o service; portanto, a assinatura calculada com a derived key é válida apenas para a data, a região e o service especificados.

A sintaxe é a seguinte:

<SignDate>/<SignRegion>/oss/aliyun_v4_request

Descrição dos campos:

  • SignDate: A data no formato YYYYMMDD incluída na assinatura.

  • SignRegion: O region ID usado para a assinatura, como cn-hangzhou.

  • oss: O nome do service incluído na assinatura, fixo como oss.

  • aliyun_v4_request: A versão incluída na assinatura, fixo como aliyun_v4_request.

CanonicalRequest

A canonicalized request construída.

3. Calcular a assinatura

O cálculo da assinatura envolve duas etapas:

  1. Calcule a SigningKey.

    DateKey = HMAC-SHA256("aliyun_v4" + SK, Date);
    DateRegionKey = HMAC-SHA256(DateKey, Region);
    DateRegionServiceKey = HMAC-SHA256(DateRegionKey, "oss");
    SigningKey = HMAC-SHA256(DateRegionServiceKey, "aliyun_v4_request");
    • SK: O AccessKey Secret incluído na assinatura.

    • Date: A data no formato YYYYMMDD incluída na assinatura, que deve ser consistente com SignDate na string-to-sign.

    • Region: O region ID usado para a assinatura, como cn-hangzhou, que deve ser consistente com SignRegion na string-to-sign.

  2. Calcule a Signature usando a SigningKey e a string-to-sign.

    Signature = HEX(HMAC-SHA256(SigningKey, StringToSign))

Exemplo de cálculo de assinatura

O exemplo a seguir demonstra como calcular uma assinatura ao chamar a operação PutObject.

Parâmetros para o cálculo da assinatura

Parâmetro

Valor

AccessKeyId

LTAI

AccessKeySecret

yourAccessKeySecret

Timestamp

20250411T064124Z

Bucket

examplebucket

Object

exampleobject

Region

cn-hangzhou

Exemplo de cálculo da assinatura

  1. Construa a canonicalized request.

    PUT
    /examplebucket/exampleobject
    
    content-disposition:attachment
    content-length:3
    content-md5:ICy5YqxZB1uWSwcVLSNLcA==
    content-type:text/plain
    x-oss-content-sha256:UNSIGNED-PAYLOAD
    x-oss-date:20250411T064124Z
    
    content-disposition;content-length
    UNSIGNED-PAYLOAD
  2. Construa a string-to-sign.

    OSS4-HMAC-SHA256
    20250411T064124Z
    20250411/cn-hangzhou/oss/aliyun_v4_request
    c46d96390bdbc2d739ac9363293ae9d710b14e48081fcb22cd8ad54b63136eca
  3. Calcule a assinatura.

    1. Calcule a SigningKey.

      Nota

      Para facilitar a leitura, a SigningKey a seguir está exibida em formato hexadecimal.

      3543b7686e65eda71e5e5ca19d548d78423c37e8ddba4dc9d83f90228b457c76
    2. Calcule a Signature.

      053edbf550ebd239b32a9cdfd93b0b2b3f2d223083aa61f75e9ac16856d61f23