

# Cálculos de assinatura para cabeçalhos finais (uploads fragmentados) (AWS Signature Version 4)
<a name="sigv4-streaming-trailers"></a>

Ao autenticar solicitações usando o cabeçalho `Authorization`, você também pode fazer upload da carga útil em fragmentos. Ao enviar os dados do objeto em fragmentos, você também tem a opção de incluir cabeçalhos finais. (Para ter mais informações, consulte [Cálculos de assinatura para o cabeçalho de autorização: transferência de carga útil em vários fragmentos (upload fragmentado) (AWS Signature Version 4)](sigv4-streaming.md).) Esta seção descreve as etapas que você precisa seguir quando quiser incluir um cabeçalho final ao término do upload de vários fragmentos.

 

**Importante**  
Ao incluir cabeçalhos finais, você deve enviar o seguinte no cabeçalho inicial:   
Você deve definir `x-amz-content-sha256` como um valor apropriado que indique que um finalizador será incluído. Para ver os valores aceitáveis para `x-amz-content-sha256`, consulte [Autenticação de solicitações: usando o cabeçalho de autorização (AWSSignature Version 4)](sigv4-auth-using-authorization-header.md).
Você deve definir `x-amz-trailer` para indicar o conteúdo que está incluindo no cabeçalho final.

 Os cabeçalhos finais só são enviados após o upload dos fragmentos. Os fragmentos anteriores são enviados normalmente e assinados conforme descrito nas seções anteriores, incluindo o envio do fragmento final com uma carga útil de 0 bytes. Os cabeçalhos finais são incluídos como seu próprio fragmento e enviados após o fragmento final com uma carga útil de 0 bytes. Por exemplo, se os dados terminassem com um fragmento de 100 KB, você enviaria o seguinte: 
+ Fragmentos de dados anteriores
+ Fragmento final de 100 KB do objeto
+ Fragmento de 0 bytes que indica o fim do objeto
+ Fragmento de cabeçalhos finais

## Exemplos: verificação de cálculos de assinatura
<a name="example-signature-calculations-trailing-header"></a>

Você pode usar os exemplos desta seção como uma referência para verificar os cálculos de assinatura no seu código. Antes de analisar os exemplos, observe o seguinte:

 
+  Os cálculos de assinatura nesses exemplos usam os seguintes exemplos de credenciais de segurança.    
[See the AWS documentation website for more details](http://docs.aws.amazon.com/pt_br/AmazonS3/latest/developerguide/sigv4-streaming-trailers.html)
+ Todos os exemplos usam o carimbo de data/hora de solicitação 20130524T000000Z (`Fri, 24 May 2013 00:00:00 GMT`).
+ Todos os exemplos usam `examplebucket` como nome do bucket.
+ Presume-se que o bucket esteja na região Leste dos EUA (Norte da Virgínia) e a credencial `Scope` e os cálculos de `Signing Key` usem `us-east-1` como especificador da região.  Para obter mais informações, consulte [Regiões e endpoints do ](https://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region) na *Referência geral do Amazon Web Services*. 
+ Você pode usar solicitações no estilo de caminho ou no estilo hospedado virtual. Os exemplos a seguir usam solicitações de estilo hospedado virtual, por exemplo: 

  ```
  https://examplebucket.s3.amazonaws.com/photos/photo1.jpg
  ```

  Para obter mais informações, consulte [Hospedagem virtual de buckets](https://docs.aws.amazon.com/AmazonS3/latest/userguide/VirtualHosting.html) no *Guia do usuário do Amazon Simple Storage Service*.

O exemplo a seguir envia uma solicitação `PUT` para fazer upload de um objeto. Os cálculos de assinatura presumem o seguinte:

 
+ Você está fazendo o upload de um arquivo de texto de 65 KB, e o conteúdo do arquivo é uma string de um único caractere composta pela letra ‘a’. 
+ O fragmento tem 64 KB. Como resultado, a carga útil é carregada em três fragmentos: 64 KB, 1 KB e o fragmento final com 0 bytes de dados. 
+ O objeto resultante tem o nome de chave `chunkObject.txt`.
+ Você está solicitando `REDUCED_REDUNDANCY` como classe de armazenamento adicionando o cabeçalho de solicitação `x-amz-storage-class`.
+ A transferência inclui um valor de soma de verificação CRC32C como cabeçalho final.

Para obter informações sobre a ação da API, consulte [PutObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html). A sintaxe de solicitação geral é a seguinte: 

```
PUT /examplebucket/chunkObject.txt HTTP/1.1
Host: s3.amazonaws.com
x-amz-date: 20130524T000000Z 
x-amz-storage-class: REDUCED_REDUNDANCY
Authorization: {{SignatureToBeCalculated}}
x-amz-content-sha256: STREAMING-AWS4-HMAC-SHA256-PAYLOAD-TRAILER
Content-Encoding: aws-chunked
x-amz-decoded-content-length: 66560
x-amz-trailer: x-amz-checksum-crc32c
Content-Length: 66946
{{<Payload>}}
```



As etapas a seguir mostram cálculos de assinatura.

1. 

**Assinatura inicial — Criar uma string a ser assinada**

   1. 

**CanonicalRequest**

       

      ```
      PUT
      /examplebucket/chunkObject.txt
      
      content-encoding:aws-chunked
      host:s3.amazonaws.com
      x-amz-content-sha256:STREAMING-AWS4-HMAC-SHA256-PAYLOAD-TRAILER
      x-amz-date:20130524T000000Z
      x-amz-decoded-content-length:66560
      x-amz-storage-class:REDUCED_REDUNDANCY
      x-amz-trailer:x-amz-checksum-crc32c
      
      content-encoding;host;x-amz-content-sha256;x-amz-date;x-amz-decoded-content-length;x-amz-storage-class;x-amz-trailer
      STREAMING-AWS4-HMAC-SHA256-PAYLOAD-TRAILER
      ```

      Na solicitação canônica, a terceira linha está vazia, pois não há parâmetros de consulta na solicitação. A última linha é a string constante fornecida como o valor da carga útil com hash, que deve ser igual ao valor de `x-amz-content-sha256 header`.

   1. 

**StringToSign**

       

      ```
      AWS4-HMAC-SHA256
      20130524T000000Z
      20130524/us-east-1/s3/aws4_request
      44d48b8c2f70eae815a0198cc73d7a546a73a93359c070abbaa5e6c7de112559
      ```

       

       
**nota**  
Para obter informações sobre cada linha na string a ser assinada, consulte o diagrama que explica o cálculo da assinatura inicial.

1. 

**SigningKey**

    

   ```
   signing key = HMAC-SHA256(HMAC-SHA256(HMAC-SHA256(HMAC-SHA256("AWS4" + "{{<YourSecretAccessKey>}}","20130524"),"us-east-1"),"s3"),"aws4_request")						
   ```

    

1. 

**Assinatura inicial**

    

   ```
   106e2a8a18243abcf37539882f36619c00e2dfc72633413f02d3b74544bfeb8e
   ```

    

1. 

**Cabeçalho de autorização**

   O cabeçalho de autorização resultante é o seguinte:

    

   ```
   AWS4-HMAC-SHA256 Credential=AKIAIOSFODNN7EXAMPLE/20130524/us-east-1/s3/aws4_request,SignedHeaders=content-encoding;content-length;host;x-amz-content-sha256;x-amz-date;x-amz-decoded-content-length;x-amz-storage-class,Signature=106e2a8a18243abcf37539882f36619c00e2dfc72633413f02d3b74544bfeb8e
   ```

    

1. 

**Fragmento 1: (65536 bytes, com valor 97 para a letra ‘a’)**

   1. String do fragmento a ser assinada:

      ```
      AWS4-HMAC-SHA256-PAYLOAD
      20130524T000000Z
      20130524/us-east-1/s3/aws4_request
      106e2a8a18243abcf37539882f36619c00e2dfc72633413f02d3b74544bfeb8e
      e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
      bf718b6f653bebc184e1479f1935b8da974d701b893afcf49e701f3e2f9f9c5a
      ```

       
**nota**  
Para obter informações sobre cada linha na string a ser assinada, consulte o diagrama no tópico anterior ([Cálculo da assinatura inicial](sigv4-streaming.md#sigv4-chunked-upload-sig-calculation-chunk0)) que mostra vários componentes da string a ser assinada. Por exemplo, as últimas três linhas consistem no seguinte:  
{{previous-signature}}
`hash("")`
`hash({{current-chunk-data}})`

   1. Assinatura do fragmento:

      ```
      b474d8862b1487a5145d686f57f013e54db672cee1c953b3010fb58501ef5aa2
      ```

   1. Dados do fragmento enviados:

      ```
      10000;chunk-signature=b474d8862b1487a5145d686f57f013e54db672cee1c953b3010fb58501ef5aa2
      <65536-bytes>
      ```

1. 

**Fragmento 2: (1024 bytes, com valor 97 para a letra ‘a’)**

   1. String do fragmento a ser assinada:

      ```
      AWS4-HMAC-SHA256-PAYLOAD
      20130524T000000Z
      20130524/us-east-1/s3/aws4_request
      b474d8862b1487a5145d686f57f013e54db672cee1c953b3010fb58501ef5aa2
      e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
      2edc986847e209b4016e141a6dc8716d3207350f416969382d431539bf292e4a
      ```

   1. Assinatura do fragmento:

      ```
      1c1344b170168f8e65b41376b44b20fe354e373826ccbbe2c1d40a8cae51e5c7
      ```

   1. Dados do fragmento enviados:

      ```
      400;chunk-signature=1c1344b170168f8e65b41376b44b20fe354e373826ccbbe2c1d40a8cae51e5c7
      <1024-bytes>
      ```

1. 

**Fragmento 3: (0 bytes de dados)**

   1. String do fragmento a ser assinada:

      ```
      AWS4-HMAC-SHA256-PAYLOAD
      20130524T000000Z
      20130524/us-east-1/s3/aws4_request
      1c1344b170168f8e65b41376b44b20fe354e373826ccbbe2c1d40a8cae51e5c7
      e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
      e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
      ```

   1. Assinatura do fragmento:

      ```
      2ca2aba2005185cf7159c6277faf83795951dd77a3a99e6e65d5c9f85863f992
      ```

   1. Dados do fragmento enviados:

      ```
      0;chunk-signature=2ca2aba2005185cf7159c6277faf83795951dd77a3a99e6e65d5c9f85863f992
      ```

1. 

**Fragmento 4: cabeçalhos finais**

   1. String do fragmento final a ser assinada:

      ```
      AWS4-HMAC-SHA256-TRAILER
      20130524T000000Z
      20130524/us-east-1/s3/aws4_request
      2ca2aba2005185cf7159c6277faf83795951dd77a3a99e6e65d5c9f85863f992
      1e376db7e1a34a8ef1c4bcee131a2d60a1cb62503747488624e10995f448d774
      ```
**nota**  
As duas últimas linhas são `previous-signature` (a assinatura do fragmento de dados de 0 bytes), `hash`({{trailing-checksum-header-name}}: {{base64-encoded-trailing-checksum-value}}\\n).  
O hash é calculado da seguinte forma, sem espaços em branco:   
O nome do cabeçalho de soma de verificação final
Dois pontos (`:`)
O valor da soma de verificação final com codificação base64
Um caractere de nova linha (`\n`). 
Neste exemplo, em que você está usando o algoritmo de hash `crc32c`, com o valor da soma de verificação codificado em Base64 `sOO8/Q==`, é possível representar o cálculo da seguinte forma: `hash('x-amz-checksum-crc32c:sOO8/Q==\n')`.

   1. Assinatura do fragmento:

      ```
      d81f82fc3505edab99d459891051a732e8730629a2e4a59689829ca17fe2e435
      ```

   1. Dados do fragmento enviados:

      ```
      x-amz-checksum-crc32c:sOO8/Q==
      x-amz-trailer-signature:d81f82fc3505edab99d459891051a732e8730629a2e4a59689829ca17fe2e435
      ```