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 |
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:
Onde:
|
|
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:
|
|
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:
|
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:
O processo consiste nas três etapas seguintes:
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.
Construir uma string-to-sign: Concatene a requisição canônica para obter a string-to-sign.
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 (
|
|
Canonical Query String |
Parâmetros de consulta codificados por URI e ordenados lexicograficamente.
|
|
Canonical Headers |
Lista de cabeçalhos de requisição. Os cabeçalhos dividem-se em três categorias:
Sintaxe:
Exemplo:
|
|
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 ( Exemplo:
|
|
Hashed PayLoad |
Representação hexadecimal do hash SHA256 do payload da requisição. Apenas o valor |
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 |
|
TimeStamp |
Hora UTC atual no formato ISO8601, como |
|
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:
Descrição:
|
|
CanonicalRequest |
Requisição canônica construída. |
3. Calcular a assinatura
O cálculo da assinatura envolve duas etapas:
-
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 formatoYYYYMMDDincluída na assinatura. Deve corresponder àSignDatena string-to-sign.Region: ID da região usado na assinatura, comocn-hangzhou. Deve corresponder àSignRegionna string-to-sign.
-
Calcule a
Signatureusando aSigningKeye 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
-
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 -
Construa a string-to-sign.
OSS4-HMAC-SHA256 20250411T064124Z 20250411/cn-hangzhou/oss/aliyun_v4_request c46d96390bdbc2d739ac9363293ae9d710b14e48081fcb22cd8ad54b63136eca -
Calcule a assinatura.
-
Calcule a SigningKey.
NotaPara facilitar a leitura, a
SigningKeya seguir está em formato hexadecimal.3543b7686e65eda71e5e5ca19d548d78423c37e8ddba4dc9d83f90228b457c76 -
Calcule a Signature.
053edbf550ebd239b32a9cdfd93b0b2b3f2d223083aa61f75e9ac16856d61f23
-