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 |
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:
Onde:
|
|
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:
|
|
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:
|
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:
O processo de cálculo da assinatura compreende três etapas:
Construir uma canonicalized request: Formate a requisição de acordo com as especificações de assinatura do OSS para gerar uma canonicalized request.
Construir a string-to-sign: Concatene a canonicalized request para derivar a string-to-sign.
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 (
|
|
Canonical Query String |
Parâmetros de query com codificação URI ordenados lexicograficamente.
|
|
Canonical Headers |
A lista de headers da requisição. Os headers de requisição se dividem em três categorias:
A sintaxe é a seguinte:
Exemplo de código:
|
|
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 Inclua apenas nomes de headers em letras minúsculas, ordenados lexicograficamente, excluindo os headers obrigatórios. Separe-os por ponto e vírgula ( Exemplo de código:
|
|
Hashed PayLoad |
A representação hexadecimal do hash SHA256 do payload da requisição. Somente o valor |
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 |
|
TimeStamp |
O horário UTC atual, cuja sintaxe deve seguir o padrão ISO8601, como |
|
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:
Descrição dos campos:
|
|
CanonicalRequest |
A canonicalized request 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: O AccessKey Secret incluído na assinatura.Date: A data no formatoYYYYMMDDincluída na assinatura, que deve ser consistente comSignDatena string-to-sign.Region: O region ID usado para a assinatura, comocn-hangzhou, que deve ser consistente comSignRegionna 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 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
-
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 -
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á exibida em formato hexadecimal.3543b7686e65eda71e5e5ca19d548d78423c37e8ddba4dc9d83f90228b457c76 -
Calcule a Signature.
053edbf550ebd239b32a9cdfd93b0b2b3f2d223083aa61f75e9ac16856d61f23
-