Todos os produtos
Search
Central de documentação

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

Última atualização: Jul 03, 2026

Ao enviar requisições ao OSS, inclua o cabeçalho Authorization com uma assinatura V4 para garantir a autenticação. Priorize o uso do SDK do OSS, pois ele já integra o algoritmo de assinatura V4 completo. Consulte esta documentação para implementar manualmente o algoritmo apenas se não for possível usar o SDK.

Usar SDKs do OSS para implementar automaticamente assinaturas V4

Para implementar o algoritmo de assinatura V4, consulte a implementação disponível nos SDKs do OSS.

SDK

Implementação

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

Cabeçalhos de requisição de autorização

Ao enviar uma requisição ao OSS, implemente a assinatura no cabeçalho Authorization para validar a requisição.

A sintaxe do cabeçalho Authorization é:

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

Os componentes do cabeçalho Authorization são descritos abaixo:

Componente

Descrição

OSS4-HMAC-SHA256

Especifica o algoritmo usado para calcular a assinatura. Esta string define a versão da assinatura e o algoritmo de assinatura (HMAC-SHA256). O valor OSS4-HMAC-SHA256 é obrigatório para autenticação com assinaturas V4.

Credential

Define o AccessKey ID e o escopo, que incluem a data, a região e o serviço de nuvem usados para calcular a assinatura. Este campo é obrigatório para autenticação com assinaturas V4.

Sintaxe:

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

Onde:

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

  • SignDate: Data da assinatura no formato YYYYMMDD.

  • SignRegion: ID da região usada na requisição. Exemplo: cn-hangzhou.

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

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

AdditionalHeaders

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

Exemplo:

content-disposition;content-length

Signature

Assinatura calculada. Campo obrigatório para autenticação com assinaturas V4.

Exemplo de valor de assinatura de 256 bits representado por 64 dígitos hexadecimais minúsculos:

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

Cálculo da assinatura

Ao receber uma requisição, o OSS calcula a assinatura e a compara com a presente no cabeçalho Authorization. A requisição é bem-sucedida se as assinaturas coincidirem; 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 consiste nas três etapas seguintes:

  1. Construir uma requisição canônica: Formate a requisição conforme as especificações de assinatura do OSS para gerar uma requisição canônica.

  2. Construir uma string-to-sign: Concatene a requisição canônica para obter a string-to-sign.

  3. Calcular a assinatura: Execute operações HMAC-SHA256 em várias etapas sobre o AccessKey Secret para gerar uma chave derivada. Em seguida, use essa chave para calcular o hash HMAC-SHA256 da string-to-sign, obtendo a assinatura final.

1. Construir uma requisição canônica

Sintaxe de uma requisição canônica:

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 requisição canônica:

Parâmetro

Descrição

HTTP Verb

Método de requisição HTTP: PUT, GET, POST, HEAD, DELETE ou OPTIONS.

Canonical URI

Caminho do recurso codificado por URI. Não inclui a string de consulta e não requer codificação de barras (/).

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

  • Se o alvo for um bucket, o caminho do recurso é /examplebucket/ e o caminho codificado é UriEncode("/examplebucket/").

  • Se o alvo for um objeto em um bucket, o caminho do recurso é /examplebucket/exampleobject e o caminho codificado é UriEncode("/examplebucket/exampleobject").

Canonical Query String

Parâmetros de consulta codificados por URI e ordenados lexicograficamente.

  • Se houver nomes e valores, codifique cada par separadamente por URI e ordene-os lexicograficamente pelos nomes codificados. A ordenação ocorre após a codificação. Use = para unir nome e valor codificados e & para concatenar parâmetros distintos.

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

    • Parâmetros de consulta canonizados:

      UriEncode("marker")+"="+UriEncode("someMarker")+"&"+UriEncode("max-keys")+"="+UriEncode("20")+"&"+UriEncode("prefix")+"="+UriEncode("somePrefix")
  • Se o parâmetro contiver apenas o nome, codifique-o por URI.

    • Parâmetro de consulta: ?acl

    • Parâmetro de consulta canonizado: UriEncode("acl")

  • Sem parâmetros de consulta (URI sem ?): defina a string de consulta canonizada como vazia ("").

Canonical Headers

Lista de cabeçalhos de requisição.

Os cabeçalhos dividem-se em três categorias:

  • Cabeçalhos obrigatórios na requisição e no cálculo da assinatura:

    • x-oss-content-sha256: aceita apenas UNSIGNED-PAYLOAD.

  • Cabeçalhos incluídos no cálculo da assinatura se presentes na requisição:

    • Content-Type

    • Content-MD5

    • x-oss-*: Outros cabeçalhos iniciados com x-oss-. Por exemplo, ao acessar via STS AK, o SecurityToken é definido por x-oss-security-token:security-token. O horário da requisição é definido por x-oss-date no formato ISO8601, como 20231203T121212Z.

  • Cabeçalhos opcionais especificados em AdditionalHeaders.

Sintaxe:

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

Exemplo:

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

Cabeçalhos opcionais incluídos no cálculo da assinatura (exclui cabeçalhos obrigatórios). Contém apenas nomes em minúsculas, ordenados lexicograficamente e separados por ponto e vírgula (;), correspondentes ao campo AdditionalHeaders.

Exemplo:

content-disposition;content-length

Hashed PayLoad

Representação hexadecimal do hash SHA256 do payload da requisição. Apenas o valor UNSIGNED-PAYLOAD é suportado.

2. Construir uma string-to-sign

Sintaxe da string-to-sign:

"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

Algoritmo de hash da assinatura. O valor deve ser OSS4-HMAC-SHA256.

TimeStamp

Hora UTC atual no formato ISO8601, como 20250320T083322Z.

Scope

Conjunto de parâmetros para obter a chave derivada. Especifica data, região e serviço, limitando a validade da assinatura a esses valores.

Sintaxe:

<SignDate>/<SignRegion>/oss/aliyun_v4_request

Descrição:

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

  • SignRegion: ID da região usada na assinatura, como cn-hangzhou.

  • oss: Nome do serviço incluído na assinatura, fixo como oss.

  • aliyun_v4_request: Versão incluída na assinatura, fixa como aliyun_v4_request.

CanonicalRequest

Requisição canônica 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: AccessKey Secret incluído na assinatura.

    • Date: Data no formato YYYYMMDD incluída na assinatura. Deve corresponder à SignDate na string-to-sign.

    • Region: ID da região usado na assinatura, como cn-hangzhou. Deve corresponder à 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 o cálculo de assinatura para uma operação PutObject.

Parâmetros para cálculo de assinatura

Parâmetro

Valor

AccessKeyId

LTAI

AccessKeySecret

yourAccessKeySecret

Timestamp

20250411T064124Z

Bucket

examplebucket

Object

exampleobject

Region

cn-hangzhou

Exemplo de cálculo de assinatura

  1. Construa a requisição canônica.

    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á em formato hexadecimal.

      3543b7686e65eda71e5e5ca19d548d78423c37e8ddba4dc9d83f90228b457c76
    2. Calcule a Signature.

      053edbf550ebd239b32a9cdfd93b0b2b3f2d223083aa61f75e9ac16856d61f23