View a markdown version of this page

Perhitungan tanda tangan untuk header trailing (unggahan berpotongan) (AWS Versi Tanda Tangan 4) - Amazon Simple Storage Service

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Perhitungan tanda tangan untuk header trailing (unggahan berpotongan) (AWS Versi Tanda Tangan 4)

Saat mengotentikasi permintaan menggunakan Authorization header, Anda juga dapat mengunggah payload dalam potongan. Saat Anda mengirim data untuk objek dalam potongan, Anda juga memiliki opsi untuk menyertakan header trailing. (Untuk informasi selengkapnya, lihat Perhitungan Tanda Tangan untuk Header Otorisasi: Mentransfer Payload dalam Beberapa Potongan (Unggahan Terpotong) (AWS Versi Tanda Tangan 4).) Bagian ini menjelaskan langkah-langkah yang perlu Anda ambil ketika Anda ingin menyertakan header trailing di akhir upload beberapa chunk Anda.

penting

Ketika Anda menyertakan header trailing, Anda harus mengirim yang berikut di header awal Anda:

Header trailing hanya dikirim setelah potongan telah diunggah. Potongan sebelumnya dikirim seperti biasa dan ditandatangani seperti yang dijelaskan di bagian sebelumnya, termasuk mengirim potongan terakhir dengan muatan 0 byte. Header trailing disertakan sebagai potongan mereka sendiri dan dikirim setelah potongan terakhir dengan muatan 0 byte. Misalnya, jika data Anda diakhiri dengan potongan 100 KB, Anda akan mengirim yang berikut:

  • Potongan data sebelumnya

  • 100 KB potongan akhir objek

  • Potongan 0 byte menandakan akhir objek

  • Potongan header yang tertinggal

Contoh: Memeriksa perhitungan tanda tangan

Anda dapat menggunakan contoh di bagian ini sebagai referensi untuk memeriksa perhitungan tanda tangan dalam kode Anda. Sebelum Anda meninjau contoh, perhatikan hal berikut:

  • Perhitungan tanda tangan dalam contoh ini menggunakan contoh kredentif keamanan berikut.

    Parameter Nilai
    AWSAccessKeyId AKIAIOSFODNN7EXAMPLE
    AWSSecretAccessKey wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
  • Semua contoh menggunakan stempel waktu permintaan 20130524T000000Z (). Fri, 24 May 2013 00:00:00 GMT

  • Semua contoh digunakan examplebucket sebagai nama bucket.

  • Bucket diasumsikan berada di Wilayah AS Timur (Virginia Utara), dan kredenSIAL serta Scope Signing Key perhitungan digunakan us-east-1 sebagai penentu Wilayah. Untuk informasi selengkapnya, lihat Wilayah dan titik akhir dalam Referensi Umum Amazon Web Services.

  • Anda dapat menggunakan gaya jalur atau permintaan gaya yang dihosting virtual. Contoh berikut menggunakan permintaan gaya yang dihosting virtual, misalnya:

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

    Untuk informasi selengkapnya, lihat Hosting Virtual Bucket di Panduan Pengguna Layanan Penyimpanan Sederhana Amazon.

Contoh berikut mengirimkan PUT permintaan untuk mengunggah objek. Perhitungan tanda tangan mengasumsikan sebagai berikut:

  • Anda mengunggah file teks 65 KB, dan konten file adalah string satu karakter yang terdiri dari huruf 'a'.

  • Ukuran potongan adalah 64 KB. Akibatnya, payload diunggah dalam tiga potongan, 64 KB, 1 KB, dan potongan terakhir dengan 0 byte data potongan.

  • Objek yang dihasilkan memiliki nama kuncichunkObject.txt.

  • Anda meminta REDUCED_REDUNDANCY sebagai kelas penyimpanan dengan menambahkan header x-amz-storage-class permintaan.

  • Transfer termasuk nilai checksum CRC32C sebagai header trailing.

Untuk informasi tentang tindakan API, lihat PutObject. Sintaks permintaan umum adalah sebagai berikut:

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>

Langkah-langkah berikut menunjukkan perhitungan tanda tangan.

  1. Tanda tangan benih - Buat String untuk Ditandatangani
    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

      Dalam permintaan kanonik, baris ketiga kosong karena tidak ada parameter kueri dalam permintaan. Baris terakhir adalah string konstan yang disediakan sebagai nilai Payload yang di-hash, yang harus sama dengan nilai. x-amz-content-sha256 header

    2. StringToSign

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

      catatan

      Untuk informasi tentang setiap baris dalam string yang akan ditandatangani, lihat diagram yang menjelaskan perhitungan tanda tangan benih.

  2. SigningKey

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

  3. Tanda Tangan Benih

    106e2a8a18243abcf37539882f36619c00e2dfc72633413f02d3b74544bfeb8e

  4. Header otorisasi

    Header Otorisasi yang dihasilkan adalah sebagai berikut:

    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

  5. Potongan 1: (65536 byte, dengan nilai 97 untuk huruf 'a')
    1. Potongan string untuk ditandatangani:

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

      catatan

      Untuk informasi tentang setiap baris dalam string yang akan ditandatangani, lihat diagram di topik sebelumnya (Menghitung Tanda Tangan Benih) yang menunjukkan berbagai komponen string untuk ditandatangani. Misalnya, tiga baris terakhir terdiri dari yang berikut:

      • previous-signature

      • hash("")

      • hash(current-chunk-data)

    2. Tanda tangan potongan:

      b474d8862b1487a5145d686f57f013e54db672cee1c953b3010fb58501ef5aa2
    3. Data potongan dikirim:

      10000;chunk-signature=b474d8862b1487a5145d686f57f013e54db672cee1c953b3010fb58501ef5aa2 <65536-bytes>
  6. Potongan 2: (1024 byte, dengan nilai 97 untuk huruf 'a')
    1. Potongan string untuk ditandatangani:

      AWS4-HMAC-SHA256-PAYLOAD 20130524T000000Z 20130524/us-east-1/s3/aws4_request b474d8862b1487a5145d686f57f013e54db672cee1c953b3010fb58501ef5aa2 e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 2edc986847e209b4016e141a6dc8716d3207350f416969382d431539bf292e4a
    2. Tanda tangan potongan:

      1c1344b170168f8e65b41376b44b20fe354e373826ccbbe2c1d40a8cae51e5c7
    3. Data potongan dikirim:

      400;chunk-signature=1c1344b170168f8e65b41376b44b20fe354e373826ccbbe2c1d40a8cae51e5c7 <1024-bytes>
  7. Potongan 3: (0 byte data)
    1. Potongan string untuk ditandatangani:

      AWS4-HMAC-SHA256-PAYLOAD 20130524T000000Z 20130524/us-east-1/s3/aws4_request 1c1344b170168f8e65b41376b44b20fe354e373826ccbbe2c1d40a8cae51e5c7 e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
    2. Tanda tangan potongan:

      2ca2aba2005185cf7159c6277faf83795951dd77a3a99e6e65d5c9f85863f992
    3. Data potongan dikirim:

      0;chunk-signature=2ca2aba2005185cf7159c6277faf83795951dd77a3a99e6e65d5c9f85863f992
  8. Potongan 4: Header yang tertinggal
    1. String potongan trailer untuk ditandatangani:

      AWS4-HMAC-SHA256-TRAILER 20130524T000000Z 20130524/us-east-1/s3/aws4_request 2ca2aba2005185cf7159c6277faf83795951dd77a3a99e6e65d5c9f85863f992 1e376db7e1a34a8ef1c4bcee131a2d60a1cb62503747488624e10995f448d774
      catatan

      Dua baris terakhir adalah previous-signature (tanda tangan potongan data 0 byte), hash (trailing-checksum-header-name:base64-encoded-trailing-checksum-value\ n).

      Hash dihitung sebagai berikut tanpa spasi:

      • Nama header checksum di belakang

      • Sebuah usus besar (:)

      • Nilai checksum trailing yang dikodekan base64

      • Karakter baris baru (\n).

      Dalam contoh ini, di mana Anda menggunakan algoritma crc32c hash, dengan nilai checksum yang dikodekan base64sOO8/Q==, Anda dapat mewakili perhitungan sebagai berikut:. hash('x-amz-checksum-crc32c:sOO8/Q==\n')

    2. Tanda tangan potongan:

      d81f82fc3505edab99d459891051a732e8730629a2e4a59689829ca17fe2e435
    3. Data potongan dikirim:

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