Saat mengirim permintaan ke Object Storage Service (OSS), sertakan signature V4 dalam header permintaan Authorization untuk memastikan otentikasi berhasil. Anda dapat menggunakan OSS SDK karena telah mengimplementasikan algoritma signature V4 yang kompleks. Implementasikan algoritma tersebut secara manual hanya jika Anda tidak dapat menggunakan SDK. Untuk informasi selengkapnya, lihat dokumen ini.
Implementasi Signature pada SDK
Jika Anda mengimplementasikan algoritma signature V4 secara manual, rujuk terlebih dahulu implementasi signature V4 pada SDK.
SDK | Implementasi Signature V4 |
Header Permintaan Authorization
Saat mengirim permintaan ke OSS, sertakan signature dalam header permintaan Authorization untuk memverifikasi permintaan tersebut.
Format header permintaan Authorization adalah sebagai berikut:
Authorization: OSS4-HMAC-SHA256 Credential=<AccessKeyId>/<SignDate>/<SignRegion>/oss/aliyun_v4_request, AdditionalHeaders=<AdditionalHeadersVal>, Signature=<SignatureVal>Tabel berikut menjelaskan komponen header permintaan Authorization:
Komponen | Deskripsi |
OSS4-HMAC-SHA256 | Menentukan algoritma untuk perhitungan signature. String ini mendefinisikan versi signature OSS V4 (OSS4) dan algoritma signature (HMAC-SHA256). Berikan nilai ini saat menggunakan signature V4 untuk otentikasi. |
Credential | ID AccessKey dan informasi cakupan (termasuk tanggal, wilayah, dan produk cloud yang digunakan untuk perhitungan signature). Sertakan bidang ini saat menggunakan signature V4 untuk otentikasi. Formatnya sebagai berikut: Di mana:
|
AdditionalHeaders | Tentukan header permintaan opsional untuk perhitungan signature (jangan tentukan header wajib). Sertakan hanya nama header dalam huruf kecil, diurutkan secara leksikografis, dan dipisahkan dengan titik koma (;). Contoh: |
Signature | Signature yang dihitung. Sertakan bidang ini saat menggunakan signature V4 untuk otentikasi. Contoh nilai signature 256-bit, direpresentasikan oleh 64 digit heksadesimal huruf kecil: |
Perhitungan Signature
Setelah OSS menerima permintaan, sistem akan menghitung signature dan membandingkannya dengan signature dalam header permintaan Authorization. Jika signature cocok, permintaan berhasil; jika tidak, permintaan gagal.
Proses Perhitungan Signature
Gambar berikut menunjukkan proses perhitungan signature:
Proses perhitungan signature terdiri dari tiga langkah:
Buat canonical request: Format permintaan sesuai spesifikasi signature OSS untuk membuat canonical request.
Buat string-to-sign: Proses canonical request untuk menghasilkan string-to-sign.
Hitung signature: Lakukan beberapa operasi hash pada AccessKey Secret untuk menghasilkan derived key, lalu gunakan derived key tersebut untuk menghitung string-to-sign sehingga menghasilkan signature akhir.
1. Buat Canonical Request
Format canonical request adalah sebagai berikut:
HTTP Verb + "\n" +
Canonical URI + "\n" +
Canonical Query String + "\n" +
Canonical Headers + "\n" +
Additional Headers + "\n" +
Hashed PayLoadCanonical request didefinisikan sebagai berikut:
Parameter | Deskripsi |
HTTP Verb | Metode permintaan HTTP, seperti PUT, GET, POST, HEAD, DELETE, dan OPTIONS. |
Canonical URI | Jalur resource yang telah di-encode URI. Jalur resource tidak mencakup query string. Jangan encode garis miring maju (
|
Canonical Query String | Parameter kueri yang telah di-encode URI, diurutkan secara leksikografis.
|
Canonical Headers | Daftar header permintaan. Header permintaan terbagi menjadi tiga kategori:
Formatnya sebagai berikut: Contoh: |
Additional Headers | Tentukan header permintaan opsional untuk perhitungan signature (jangan tentukan header wajib). Sertakan hanya nama header dalam huruf kecil, diurutkan secara leksikografis, dan dipisahkan dengan titik koma (;). Nilai ini harus konsisten dengan Contoh: |
Hashed PayLoad | Representasi heksadesimal dari nilai hash SHA256 muatan permintaan. Saat ini hanya |
2. Buat String-to-Sign
Format string-to-sign adalah sebagai berikut:
"OSS4-HMAC-SHA256" + "\n" +
TimeStamp + "\n" +
Scope + "\n" +
Hex(SHA256Hash(<CanonicalRequest>))Tabel berikut menjelaskan komponen string-to-sign:
Parameter | Deskripsi |
OSS4-HMAC-SHA256 | Algoritma hash signature. Nilainya harus |
TimeStamp | Waktu UTC saat ini. Formatnya harus ISO8601, seperti |
Scope | Kumpulan parameter untuk menurunkan kunci. Kumpulan ini menentukan tanggal, wilayah, dan layanan. Oleh karena itu, signature yang dihitung dengan kunci turunan hanya berlaku untuk tanggal, wilayah, dan layanan yang ditentukan. Formatnya sebagai berikut: Penjelasan:
|
CanonicalRequest | Canonical request yang telah dibuat. |
3. Menghitung Tanda Tangan
Perhitungan signature terdiri dari dua langkah:
Hitung
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 yang digunakan dalam signature.Date: Tanggal yang digunakan dalam signature, dalam formatYYYYMMDD. Harus sesuai denganSignDatedalam string-to-sign.Region: ID wilayah yang digunakan untuk signature, seperticn-hangzhou. Harus sesuai denganSignRegiondalam string-to-sign.
Gunakan
SigningKeydan string-to-sign untuk menghitungSignature.Signature = HEX(HMAC-SHA256(SigningKey, StringToSign))
Contoh Perhitungan Signature
Contoh ini menggunakan operasi PutObject untuk mengilustrasikan perhitungan signature.
Parameter Perhitungan Signature
Parameter | Nilai |
AccessKeyId | LTAI**************** |
AccessKeySecret | yourAccessKeySecret |
Timestamp | 20250411T064124Z |
Bucket | examplebucket |
Object | exampleobject |
Region | cn-hangzhou |
Contoh Proses Perhitungan Signature
Buat canonical 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-PAYLOADBuat string-to-sign.
OSS4-HMAC-SHA256 20250411T064124Z 20250411/cn-hangzhou/oss/aliyun_v4_request c46d96390bdbc2d739ac9363293ae9d710b14e48081fcb22cd8ad54b63136ecaHitung signature.
Hitung SigningKey.
CatatanUntuk kemudahan membaca,
SigningKeyditampilkan dalam format heksadesimal di bawah ini.Kombinasi parameter signature yang berbeda menghasilkan nilai
SigningKeyyang berbeda. Contoh ini hanya sebagai referensi; gunakan hasil perhitungan aktual Anda.
3543b7686e65eda71e5e5ca19d548d78423c37e8ddba4dc9d83f90228b457c76Hitung Signature.
053edbf550ebd239b32a9cdfd93b0b2b3f2d223083aa61f75e9ac16856d61f23