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 Otorisasi: Mentransfer Payload dalam Satu Potongan (AWS Versi Tanda Tangan 4)
Saat menggunakan Authorization header untuk mengotentikasi permintaan, nilai header termasuk, antara lain, tanda tangan. Perhitungan tanda tangan bervariasi tergantung pada pilihan yang Anda buat untuk mentransfer payload (Gambaran umum). Bagian ini menjelaskan perhitungan tanda tangan saat Anda memilih untuk mentransfer payload dalam satu potongan. Bagian contoh (lihatContoh: Perhitungan Tanda Tangan) menunjukkan perhitungan tanda tangan dan Authorization header hasil yang dapat Anda gunakan sebagai rangkaian pengujian untuk memverifikasi kode Anda.
penting
Saat mentransfer payload dalam satu potongan, Anda dapat secara opsional memilih untuk menyertakan hash payload dalam perhitungan tanda tangan, disebut sebagai payload yang ditandatangani (jika Anda tidak memasukkannya, payload dianggap tidak ditandatangani). Prosedur penandatanganan yang dibahas di bagian berikut berlaku untuk keduanya, tetapi perhatikan perbedaan berikut:
-
Opsi payload yang ditandatangani — Anda menyertakan hash payload saat membangun permintaan kanonik (yang kemudian menjadi bagian dari StringToSign, seperti yang dijelaskan di bagian perhitungan tanda tangan). Anda juga menentukan nilai yang sama dengan nilai
x-amz-content-sha256header saat mengirim permintaan ke S3. -
Opsi payload yang tidak ditandatangani — Anda menyertakan string literal
UNSIGNED-PAYLOADsaat membuat permintaan kanonik, dan menetapkan nilai yang sama dengan nilaix-amz-content-sha256header saat mengirim permintaan ke Amazon S3.
Saat Anda mengirim permintaan ke Amazon S3, nilai x-amz-content-sha256 header memberi tahu Amazon S3 apakah payload ditandatangani atau tidak. Amazon S3 kemudian dapat membuat tanda tangan yang sesuai untuk verifikasi.
Dalam kedua kasus, karena nilai x-amz-content-sha256 header sudah menjadi bagian dari AndaHashedPayload, Anda tidak diharuskan untuk menyertakan x-amz-content-sha256 header sebagai header kanonik.
Menghitung Tanda Tangan
Untuk menghitung tanda tangan, pertama-tama Anda memerlukan string untuk ditandatangani. Anda kemudian menghitung HMAC-SHA256 hash string untuk ditandatangani dengan menggunakan kunci penandatanganan. Diagram berikut menggambarkan proses, termasuk berbagai komponen string yang Anda buat untuk penandatanganan
Ketika Amazon S3 menerima permintaan yang diautentikasi, ia menghitung tanda tangan dan kemudian membandingkannya dengan tanda tangan yang Anda berikan dalam permintaan. Untuk alasan itu, Anda harus menghitung tanda tangan dengan menggunakan metode yang sama yang digunakan oleh Amazon S3. Proses menempatkan permintaan dalam bentuk yang disepakati untuk penandatanganan disebut kanonikalisasi.
Tabel berikut menjelaskan fungsi yang ditunjukkan dalam diagram. Anda perlu menerapkan kode untuk fungsi-fungsi ini.
| Fungsi | Deskripsi |
|---|---|
Lowercase() |
Ubah string menjadi huruf kecil. |
Hex() |
Pengkodean huruf kecil 16. |
SHA256Hash() |
Fungsi hash kriptografi Secure Hash Algorithm (SHA). |
HMAC-SHA256() |
Menghitung HMAC dengan menggunakan algoritma SHA256 dengan kunci penandatanganan yang disediakan. Ini adalah tanda tangan terakhir. |
Trim() |
Hapus spasi kosong di depan atau di belakang. |
UriEncode() |
URI mengkodekan setiap byte. UriEncode() harus menegakkan aturan berikut:
pentingUriEncode Fungsi standar yang disediakan oleh platform pengembangan Anda mungkin tidak berfungsi karena perbedaan dalam implementasi dan ambiguitas terkait dalam RFC yang mendasarinya. Kami menyarankan Anda menulis UriEncode fungsi kustom Anda sendiri untuk memastikan bahwa pengkodean Anda akan berfungsi. Berikut ini adalah contoh fungsi UriEncode () di Java.
|
Tugas 1: Buat Permintaan Kanonik
Bagian ini memberikan gambaran umum tentang membuat permintaan kanonik.
Berikut ini adalah format permintaan kanonik yang digunakan Amazon S3 untuk menghitung tanda tangan. Agar tanda tangan cocok, Anda harus membuat permintaan kanonik dalam format ini:
<HTTPMethod>\n<CanonicalURI>\n<CanonicalQueryString>\n<CanonicalHeaders>\n<SignedHeaders>\n<HashedPayload>
Di mana:
-
HTTPMethodadalah salah satu metode HTTP, misalnya GET, PUT, HEAD, dan DELETE. -
CanonicalURIadalah URI-encoded versi komponen jalur absolut dari URI — semuanya dimulai dengan “/” yang mengikuti nama domain dan hingga akhir string atau ke karakter tanda tanya ('?') jika Anda memiliki parameter string kueri. URI dalam contoh berikut,/examplebucket/myphoto.jpg, adalah jalur absolut dan Anda tidak mengkodekan “/” di jalur absolut:http://s3.amazonaws.com/examplebucket/myphoto.jpgcatatan
Anda tidak menormalkan jalur URI untuk permintaan ke Amazon S3. Misalnya, Anda mungkin memiliki bucket dengan objek bernama “my-object//example//photo.user”. Normalisasi jalur mengubah nama objek dalam permintaan menjadi “my- object/example /photo.user”. Ini adalah jalur yang salah untuk objek itu.
-
CanonicalQueryStringmenentukan parameter URI-encoded string kueri. Anda URI-encode nama dan nilai satu per satu. Anda juga harus mengurutkan parameter dalam string kueri kanonik menurut abjad berdasarkan nama kunci. Penyortiran terjadi setelah pengkodean. String kueri dalam contoh URI berikut adalahprefix=somePrefix&marker=someMarker&max-keys=20:http://s3.amazonaws.com/examplebucket?prefix=somePrefix&marker=someMarker&max-keys=20String kueri kanonik adalah sebagai berikut (jeda baris ditambahkan ke contoh ini untuk keterbacaan):
UriEncode("marker")+"="+UriEncode("someMarker")+"&"+ UriEncode("max-keys")+"="+UriEncode("20") + "&" + UriEncode("prefix")+"="+UriEncode("somePrefix")Ketika permintaan menargetkan subresource, nilai parameter query yang sesuai akan menjadi string kosong (“”). Misalnya, URI berikut mengidentifikasi
ACLsubresource padaexamplebucketbucket:http://s3.amazonaws.com/examplebucket?aclDalam hal ini adalah sebagai berikut: CanonicalQueryString
UriEncode("acl") + "=" + ""Jika URI tidak menyertakan '?' , tidak ada string kueri dalam permintaan, dan Anda mengatur string kueri kanonik ke string kosong (“”). Anda masih perlu memasukkan "\ n”.
-
CanonicalHeadersadalah daftar header permintaan dengan nilainya. Nama header individu dan pasangan nilai dipisahkan oleh karakter baris baru (”\ n “). Nama header harus dalam huruf kecil. Anda harus mengurutkan nama header menurut abjad untuk membangun string, seperti yang ditunjukkan dalam contoh berikut:Lowercase(<HeaderName1>)+":"+Trim(<value>)+"\n" Lowercase(<HeaderName2>)+":"+Trim(<value>)+"\n" ... Lowercase(<HeaderNameN>)+":"+Trim(<value>)+"\n"Trim()FungsiLowercase()dan yang digunakan dalam contoh ini dijelaskan di bagian sebelumnya.CanonicalHeadersDaftar harus mencakup yang berikut:-
hostheader HTTP. -
Jika
Content-MD5header ada dalam permintaan, Anda harus menambahkannya keCanonicalHeadersdaftar. -
Setiap
x-amz-*header yang Anda rencanakan untuk disertakan dalam permintaan Anda juga harus ditambahkan. Misalnya, jika Anda menggunakan kredentif keamanan sementara, Anda harus menyertakanx-amz-security-tokendalam permintaan Anda. Anda harus menambahkan header ini dalam daftarCanonicalHeaders.
catatan
x-amz-content-sha256Header diperlukan untuk semua permintaan AWS Signature Version 4. Ini menyediakan hash dari payload permintaan. Namun, Anda tidak diharuskan menyertakanx-amz-content-sha256sebagai header kanonik karena S3 akan secara otomatis menggunakan nilainya saat menghitung hash payload yang dikirim dalam permintaan.Jika tidak ada payload, Anda harus memberikan hash dari string kosong.
Jika Anda tidak ingin S3 memeriksa hash permintaan, Anda dapat menggunakan string literal sebagai gant
"UNSIGNED-PAYLOAD"inya.
Berikut ini adalah contoh
CanonicalHeadersstring. Nama header dalam huruf kecil dan diurutkan.contoh Contoh 1
host:s3.amazonaws.com x-amz-content-sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 x-amz-date:20130708T220855Zcontoh Contoh 2
host:s3.amazonaws.com x-amz-content-sha256:UNSIGNED-PAYLOAD x-amz-date:20130708T220855Zcontoh Contoh 3
host:s3.amazonaws.com x-amz-date:20130708T220855Zcatatan
Untuk tujuan menghitung tanda tangan otorisasi, header host dan semua
x-amz-*header, tidak termasukx-amz-content-sha256, diperlukan. Namun, untuk mencegah gangguan data, Anda harus mempertimbangkan untuk memasukkan semua header dalam perhitungan tanda tangan.Menandatangani
x-amz-content-sha256header bersifat opsional karena S3 akan menggunakan nilainya saat menghitung hash payload permintaan yang diterima. -
-
SignedHeadersadalah daftar nama header permintaan huruf kecil yang diurutkan berdasarkan abjad dan dipisahkan titik koma. Header permintaan dalam daftar adalah header yang sama yang Anda sertakan dalam string.CanonicalHeadersDalam contoh sebelumnya, nilainyaSignedHeadersadalah sebagai berikut:contoh Contoh 1 dan 2
host;x-amz-content-sha256;x-amz-datecontoh Contoh 3
host;x-amz-date -
HashedPayloadadalah nilai heksadesimal dari hash SHA256 dari payload permintaan.Hex(SHA256Hash(<payload>)Jika tidak ada payload dalam permintaan, Anda menghitung hash dari string kosong sebagai berikut:
Hex(SHA256Hash(""))Hash mengembalikan nilai berikut:
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855Misalnya, ketika Anda mengunggah objek dengan menggunakan permintaan PUT, Anda memberikan data objek dalam tubuh. Ketika Anda mengambil objek dengan menggunakan permintaan GET, Anda menghitung hash string kosong.
Tugas 2: Buat String untuk Ditandatangani
Bagian ini memberikan gambaran umum tentang membuat string untuk ditandatangani. Untuk petunjuk langkah demi langkah, lihat Tugas 2: Membuat String untuk Masuk Referensi Umum AWS.
String yang akan ditandatangani adalah gabungan dari string berikut:
"AWS4-HMAC-SHA256" + "\n" + timeStampISO8601Format + "\n" +<Scope>+ "\n" + Hex(SHA256Hash(<CanonicalRequest>))
String konstan AWS4-HMAC-SHA256 menentukan algoritma hash yang Anda gunakan, HMAC-SHA256. Ini timeStamp adalah waktu UTC saat ini dalam format ISO 8601 (misalnya,20130524T000000Z).
Scopemengikat tanda tangan yang dihasilkan ke tanggal tertentu Wilayah AWS, sebuah, dan layanan. Dengan demikian, tanda tangan yang dihasilkan hanya akan berfungsi di Wilayah tertentu dan untuk layanan tertentu. Tanda tangan berlaku selama tujuh hari setelah tanggal yang ditentukan.
date.Format(<YYYYMMDD>) + "/" +<region>+ "/" +<service>+ "/aws4_request"
Untuk Amazon S3, string layanan adalahs3. Untuk daftar region string, lihat Wil ayah dan Titik Akhir di Referensi Umum AWS. Kolom Wilayah dalam tabel ini menyediakan daftar string Wilayah yang valid.
Cakupan berikut membatasi tanda tangan yang dihasilkan ke Wil us-east-1 ayah dan Amazon S3.
20130606/us-east-1/s3/aws4_request
catatan
Scopeharus menggunakan tanggal yang sama yang Anda gunakan untuk menghitung kunci penandatanganan, seperti yang dibahas di bagian berikut.
Tugas 3: Hitung Tanda Tangan
Di AWS Tanda Tangan Versi 4, alih-alih menggunakan kunci AWS akses untuk menandatangani permintaan, pertama-tama Anda membuat kunci penandatanganan yang dicakup ke Wilayah dan layanan tertentu. Untuk informasi selengkapnya tentang penandatanganan kunci, lihatPengantar Permintaan Penandatanganan.
DateKey = HMAC-SHA256("AWS4"+"<SecretAccessKey>", "<YYYYMMDD>") DateRegionKey = HMAC-SHA256(<DateKey>, "<aws-region>") DateRegionServiceKey = HMAC-SHA256(<DateRegionKey>, "<aws-service>") SigningKey = HMAC-SHA256(<DateRegionServiceKey>, "aws4_request")
catatan
Beberapa kasus penggunaan dapat memproses kunci tanda tangan hingga 7 hari. Untuk informasi selengkapnya, lihat Berbagi Objek dengan Orang Lain.
Untuk daftar string Wilayah, lihat Wil ayah dan Titik Akhir di Referensi Umum AWS.
Menggunakan kunci penandatanganan memungkinkan Anda menyimpan AWS kredensibilitas Anda di satu tempat yang aman. Misalnya, jika Anda memiliki beberapa server yang berkomunikasi dengan Amazon S3, Anda membagikan kunci penandatanganan dengan server tersebut; Anda tidak perlu menyimpan salinan kunci akses rahasia Anda di setiap server. Kunci penandatanganan berlaku hingga tujuh hari. Jadi setiap kali Anda menghitung kunci penandatanganan, Anda perlu membagikan kunci penandatanganan dengan server Anda. Untuk informasi selengkapnya, lihat Permintaan Otentikasi (AWS Versi Tanda Tangan 4).
Tanda tangan terakhir adalah HMAC-SHA256 hash dari string yang akan ditandatangani, menggunakan kunci penandatanganan sebagai kunci.
HMAC-SHA256(SigningKey, StringToSign)
Untuk petunjuk langkah demi langkah tentang membuat tanda tangan, lihat Tugas 3: Membuat Tangan Tangan di Referensi Umum AWS.
Contoh: Perhitungan Tanda Tangan
Anda dapat menggunakan contoh di bagian ini sebagai referensi untuk memeriksa perhitungan tanda tangan dalam kode Anda. Perhitungan yang ditunjukkan dalam contoh menggunakan data berikut:
-
Contoh kunci akses.
Parameter Nilai AWSAccessKeyIdAKIAIOSFODNN7EXAMPLEAWSSecretAccessKeywJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY -
Minta stempel waktu 20130524T000000Z ().
Fri, 24 May 2013 00:00:00 GMT -
Nama bucket
examplebucket. -
Ember diasumsikan berada di Wilayah Timur AS (Virginia Utara). Kredensi
ScopedanSigning Keyperhitungan digunakanus-east-1sebagai penentu Wilayah. Untuk informasi tentang Wilayah lain, lihat Wil ayah dan Titik Akhir di Referensi Umum AWS. -
Anda dapat menggunakan permintaan gaya path atau virtual hosted—style. Contoh berikut menunjukkan cara menandatangani permintaan gaya host virtual, misalnya:
https://examplebucket.s3.amazonaws.com/photos/photo1.jpgUntuk informasi selengkapnya, lihat Hosting Virtual Bucket di Panduan Pengguna Layanan Penyimpanan Sederhana Amazon.
Contoh: GET Object
Contoh berikut mendapatkan 10 byte pertama dari sebuah objek (test.txt) dariexamplebucket. Untuk informasi selengkapnya tentang tindakan API, lihat GetObject.
GET /test.txt HTTP/1.1 Host: examplebucket.s3.amazonaws.com Authorization:SignatureToBeCalculatedRange: bytes=0-9 x-amz-content-sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 x-amz-date: 20130524T000000Z
Karena permintaan GET ini tidak menyediakan konten tubuh apa pun, x-amz-content-sha256 nilainya dapat berupa hash dari badan permintaan kosong atau string literal"UNSIGNED-PAYLOAD". Langkah-langkah berikut menunjukkan perhitungan tanda tangan dan konstruksi Authorization header menggunakan hash dari string kosong.
-
StringToSign
-
CanonicalRequest
GET /test.txt host:examplebucket.s3.amazonaws.com range:bytes=0-9 x-amz-content-sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 x-amz-date:20130524T000000Z host;range;x-amz-content-sha256;x-amz-date e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855Dalam string permintaan kanonik, baris terakhir adalah hash dari badan permintaan kosong. Baris ketiga kosong karena tidak ada parameter kueri dalam permintaan.
-
StringToSign
AWS4-HMAC-SHA256 20130524T000000Z 20130524/us-east-1/s3/aws4_request 7344ae5b7ee6c3e7e6b0fe0640412a37625d1fbfff95c48bbb2dc43964946972
-
-
SigningKey
signing key = HMAC-SHA256(HMAC-SHA256(HMAC-SHA256(HMAC-SHA256("AWS4" + "<YourSecretAccessKey>","20130524"),"us-east-1"),"s3"),"aws4_request") -
Tanda tangan
f0e8bdb87c964420e857bd35b5d6ed310bd44f0170aba48dd91039c6036bdb41 -
Header otorisasi
AuthorizationHeader yang dihasilkan adalah sebagai berikut:AWS4-HMAC-SHA256 Credential=AKIAIOSFODNN7EXAMPLE/20130524/us-east-1/s3/aws4_request,SignedHeaders=host;range;x-amz-content-sha256;x-amz-date,Signature=f0e8bdb87c964420e857bd35b5d6ed310bd44f0170aba48dd91039c6036bdb41
Contoh: Objek PUT
Contoh permintaan PUT ini membuat objek (test$file.text) diexamplebucket. Contoh tersebut mengasumsikan sebagai berikut:
-
Anda meminta
REDUCED_REDUNDANCYsebagai kelas penyimpanan dengan menambahkan headerx-amz-storage-classpermintaan. Untuk informasi tentang kelas penyimpanan, lihat Kelas Penyimpanan di Panduan Pengguna Layanan Penyimpanan Sederhana Amazon. -
Isi file yang diunggah adalah string,
"Welcome to Amazon S3."x-amz-content-sha256Nilai permintaan didasarkan pada string ini.
Untuk informasi tentang tindakan API, lihat PutObject.
PUT test$file.text HTTP/1.1 Host: examplebucket.s3.amazonaws.com Date: Fri, 24 May 2013 00:00:00 GMT Authorization:SignatureToBeCalculatedx-amz-date: 20130524T000000Z x-amz-storage-class: REDUCED_REDUNDANCY x-amz-content-sha256: 44ce7dd67c959e0d3524ffac1771dfbba87d2b6b4b4e99e42034a8b803f8b072<Payload>
Langkah-langkah berikut menunjukkan perhitungan tanda tangan.
-
StringToSign
-
CanonicalRequest
PUT /test%24file.text date:Fri, 24 May 2013 00:00:00 GMT host:examplebucket.s3.amazonaws.com x-amz-content-sha256:44ce7dd67c959e0d3524ffac1771dfbba87d2b6b4b4e99e42034a8b803f8b072 x-amz-date:20130524T000000Z x-amz-storage-class:REDUCED_REDUNDANCY date;host;x-amz-content-sha256;x-amz-date;x-amz-storage-class 44ce7dd67c959e0d3524ffac1771dfbba87d2b6b4b4e99e42034a8b803f8b072Dalam permintaan kanonik, baris ketiga kosong karena tidak ada parameter kueri dalam permintaan. Header
x-amz-content-sha256kanonik dapat secara opsional ditandatangani karena hash payloadnya sudah disediakan di bagian bawah permintaan. Baris terakhir adalah hash tubuh, yang harus sama denganx-amz-content-sha256 headernilai yang dikirim ke S3 dalam permintaan HTTP. -
StringToSign
AWS4-HMAC-SHA256 20130524T000000Z 20130524/us-east-1/s3/aws4_request 9e0e90d9c76de8fa5b200d8c849cd5b8dc7a3be3951ddb7f6a76b4158342019d
-
-
SigningKey
signing key = HMAC-SHA256(HMAC-SHA256(HMAC-SHA256(HMAC-SHA256("AWS4" + "<YourSecretAccessKey>","20130524"),"us-east-1"),"s3"),"aws4_request") -
Tanda tangan
98ad721746da40c64f1a55b78f14c238d841ea1380cd77a1b5971af0ece108bd -
Header otorisasi
AuthorizationHeader yang dihasilkan adalah sebagai berikut:AWS4-HMAC-SHA256 Credential=AKIAIOSFODNN7EXAMPLE/20130524/us-east-1/s3/aws4_request,SignedHeaders=date;host;x-amz-content-sha256;x-amz-date;x-amz-storage-class,Signature=98ad721746da40c64f1a55b78f14c238d841ea1380cd77a1b5971af0ece108bd
Contoh: GET Bucket Lifecycle
Permintaan GET berikut mengambil konfigurasi siklus hidup. examplebucket Untuk informasi tentang tindakan API, lihat GetBucketLifecycleConfiguration.
GET ?lifecycle HTTP/1.1 Host: examplebucket.s3.amazonaws.com Authorization:SignatureToBeCalculatedx-amz-date: 20130524T000000Z x-amz-content-sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
Karena permintaan tidak menyediakan konten tubuh apa pun, nilai x-amz-content-sha256 header adalah hash dari badan permintaan kosong. Langkah-langkah berikut menunjukkan perhitungan tanda tangan.
-
StringToSign
-
CanonicalRequest
GET / lifecycle= host:examplebucket.s3.amazonaws.com x-amz-content-sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 x-amz-date:20130524T000000Z host;x-amz-content-sha256;x-amz-date e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855Dalam permintaan kanonik, baris terakhir adalah hash dari badan permintaan kosong.
-
StringToSign
AWS4-HMAC-SHA256 20130524T000000Z 20130524/us-east-1/s3/aws4_request 9766c798316ff2757b517bc739a67f6213b4ab36dd5da2f94eaebf79c77395ca
-
-
SigningKey
signing key = HMAC-SHA256(HMAC-SHA256(HMAC-SHA256(HMAC-SHA256("AWS4" + "<YourSecretAccessKey>","20130524"),"us-east-1"),"s3"),"aws4_request") -
Tanda tangan
fea454ca298b7da1c68078a5d1bdbfbbe0d65c699e0f91ac7a200a0136783543 -
Header otorisasi
AuthorizationHeader yang dihasilkan adalah sebagai berikut:AWS4-HMAC-SHA256 Credential=AKIAIOSFODNN7EXAMPLE/20130524/us-east-1/s3/aws4_request,SignedHeaders=host;x-amz-content-sha256;x-amz-date,Signature=fea454ca298b7da1c68078a5d1bdbfbbe0d65c699e0f91ac7a200a0136783543
Contoh: Dapatkan Bucket (Daftar Objek)
Contoh berikut mengambil daftar objek dari examplebucket bucket. Untuk informasi tentang tindakan API, lihat ListObjects.
GET ?max-keys=2&prefix=J HTTP/1.1 Host: examplebucket.s3.amazonaws.com Authorization:SignatureToBeCalculatedx-amz-date: 20130524T000000Z x-amz-content-sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
Karena permintaan tidak menyediakan badan, nilainya x-amz-content-sha256 adalah hash dari badan permintaan kosong. Langkah-langkah berikut menunjukkan perhitungan tanda tangan.
-
StringToSign
-
CanonicalRequest
GET / max-keys=2&prefix=J host:examplebucket.s3.amazonaws.com x-amz-content-sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 x-amz-date:20130524T000000Z host;x-amz-content-sha256;x-amz-date e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855Dalam string kanonik, baris terakhir adalah hash dari badan permintaan kosong.
-
StringToSign
AWS4-HMAC-SHA256 20130524T000000Z 20130524/us-east-1/s3/aws4_request df57d21db20da04d7fa30298dd4488ba3a2b47ca3a489c74750e0f1e7df1b9b7
-
-
SigningKey
signing key = HMAC-SHA256(HMAC-SHA256(HMAC-SHA256(HMAC-SHA256("AWS4" + "<YourSecretAccessKey>","20130524"),"us-east-1"),"s3"),"aws4_request") -
Tanda tangan
34b48302e7b5fa45bde8084f4b7868a86f0a534bc59db6670ed5711ef69dc6f7 -
Header otorisasi
AuthorizationHeader yang dihasilkan adalah sebagai berikut:AWS4-HMAC-SHA256 Credential=AKIAIOSFODNN7EXAMPLE/20130524/us-east-1/s3/aws4_request,SignedHeaders=host;x-amz-content-sha256;x-amz-date,Signature=34b48302e7b5fa45bde8084f4b7868a86f0a534bc59db6670ed5711ef69dc6f7