Saat memulai permintaan ke OSS, sertakan header permintaan Authorization yang berisi tanda tangan V4 untuk memastikan otentikasi berhasil. Prioritaskan penggunaan SDK yang disediakan oleh OSS karena SDK tersebut telah mengintegrasikan algoritma tanda tangan V4 yang canggih. Jika SDK tidak dapat digunakan, rujuk pada dokumentasi ini untuk mengimplementasikan algoritma tanda tangan V4 secara manual.
Gunakan SDK OSS untuk mengimplementasikan tanda tangan V4 secara otomatis
Untuk mengimplementasikan algoritma tanda tangan V4, sebaiknya merujuk pada implementasi tanda tangan V4 dalam SDK OSS.
SDK | Implementasi |
Header permintaan Authorization
Saat memulai permintaan ke OSS, Anda harus mengimplementasikan tanda tangan di header Authorization untuk memverifikasi permintaan.
Berikut adalah sintaksis dari header Authorization:
Authorization: OSS4-HMAC-SHA256 Credential=<AccessKeyId>/<SignDate>/<SignRegion>/oss/aliyun_v4_request, AdditionalHeaders=<AdditionalHeadersVal>, Signature=<SignatureVal>Berikut adalah deskripsi dari header Authorization:
Komponen | Deskripsi |
OSS4-HMAC-SHA256 | Menentukan algoritma yang digunakan untuk menghitung tanda tangan. String ini menentukan versi tanda tangan dan algoritma penandatanganan (HMAC-SHA256). Nilai OSS4-HMAC-SHA256 diperlukan saat menggunakan tanda tangan V4 untuk otentikasi. |
Credential | Menentukan ID AccessKey dan ruang lingkup, yang mencakup tanggal, wilayah, dan layanan cloud yang digunakan untuk menghitung tanda tangan. Bidang ini diperlukan saat menggunakan tanda tangan V4 untuk otentikasi. Berikut adalah sintaksis: Dimana:
|
AdditionalHeaders | Tentukan header permintaan opsional yang termasuk dalam perhitungan tanda tangan (Anda tidak perlu menentukan header yang wajib termasuk dalam perhitungan tanda tangan). Bidang ini hanya berisi nama header huruf kecil, diurutkan secara leksikografis dan dipisahkan dengan titik koma (;). Contohnya adalah sebagai berikut: |
Signature | Tanda tangan yang dihitung. Bidang ini diperlukan saat menggunakan tanda tangan V4 untuk otentikasi. Contoh kode sampel berikut memberikan contoh nilai tanda tangan 256-bit yang direpresentasikan oleh 64 digit heksadesimal huruf kecil: |
Perhitungan tanda tangan
Setelah menerima permintaan, OSS menghitung tanda tangan dan membandingkannya dengan yang ada di header permintaan Authorization. Jika cocok, permintaan berhasil; jika tidak, permintaan gagal.
Proses perhitungan tanda tangan
Gambar berikut menunjukkan proses perhitungan tanda tangan:
Proses perhitungan tanda tangan terdiri dari tiga langkah berikut:
Buat Permintaan Kanonisasi: Format permintaan sesuai dengan spesifikasi tanda tangan OSS untuk menghasilkan permintaan kanonisasi.
Buat String-to-Sign: Gabungkan permintaan kanonisasi untuk mendapatkan string-to-sign.
Hitung Tanda Tangan: Lakukan operasi hash pada Secret AccessKey untuk menghasilkan kunci turunan, lalu gunakan kunci turunan untuk menghitung string-to-sign dan mendapatkan tanda tangan akhir. Operasi HMAC-SHA256 multi-langkah dilakukan pada Secret AccessKey untuk menghasilkan kunci turunan, yang kemudian digunakan untuk menghitung hash HMAC-SHA256 dari string-to-sign, menghasilkan tanda tangan akhir.
1. Buat permintaan kanonisasi
Berikut adalah sintaksis dari permintaan kanonisasi:
HTTP Verb + "\n" +
Canonical URI + "\n" +
Canonical Query String + "\n" +
Canonical Headers + "\n" +
Additional Headers + "\n" +
Hashed PayLoadTabel berikut menjelaskan parameter dalam permintaan kanonisasi:
Parameter | Deskripsi |
HTTP Verb | Metode permintaan HTTP, termasuk PUT, GET, POST, HEAD, DELETE, dan OPTIONS. |
Canonical URI | Path sumber daya yang di-enkode URI. Path sumber daya tidak termasuk string query, dan encoding untuk garis miring (
|
Canonical Query String | Parameter query yang di-URI-encode diurutkan secara leksikografis.
|
Canonical Headers | Daftar header permintaan. Header permintaan dibagi menjadi tiga kategori:
Sintaksisnya adalah sebagai berikut: Contoh kode sampel berikut memberikan contoh: |
Additional Headers | Tentukan header permintaan opsional yang termasuk dalam perhitungan tanda tangan (Anda tidak perlu menentukan header yang wajib termasuk dalam perhitungan tanda tangan). Bidang ini hanya berisi nama header huruf kecil, diurutkan secara leksikografis dan dipisahkan dengan titik koma (;), konsisten dengan Tentukan header opsional yang termasuk dalam perhitungan tanda tangan (tidak termasuk header wajib), hanya nama header huruf kecil yang disertakan dan diurutkan secara leksikografis. Mereka dipisahkan oleh titik koma ( Contoh kode sampel berikut memberikan contoh: |
Hashed PayLoad | Representasi heksadesimal dari nilai hash SHA256 payload permintaan. Hanya nilai |
2. Buat string-to-sign
Sintaksis dari string-to-sign adalah sebagai berikut:
"OSS4-HMAC-SHA256" + "\n" +
TimeStamp + "\n" +
Scope + "\n" +
Hex(SHA256Hash(<CanonicalRequest>))Tabel berikut menjelaskan parameter dalam string-to-sign:
Parameter | Deskripsi |
OSS4-HMAC-SHA256 | Algoritma hash dari tanda tangan, nilainya harus |
TimeStamp | Waktu UTC saat ini, sintaksisnya harus dalam format ISO8601, seperti |
Scope | Set parameter untuk mendapatkan/mengambil kunci turunan. Set parameter ini menentukan tanggal, wilayah, dan layanan. Oleh karena itu, tanda tangan yang dihitung menggunakan kunci turunan hanya valid untuk tanggal, wilayah, dan layanan yang ditentukan. Sintaksisnya adalah sebagai berikut: Penjelasannya adalah sebagai berikut:
|
CanonicalRequest | Permintaan kanonisasi yang telah dibuat. |
3. Hitung tanda tangan
Menghitung tanda tangan melibatkan dua langkah berikut:
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 termasuk dalam tanda tangan.Date: Tanggal dalam formatYYYYMMDDyang termasuk dalam tanda tangan, yang harus konsisten denganSignDatedalam string-to-sign.Region: ID wilayah yang digunakan untuk tanda tangan, seperticn-hangzhou, yang harus konsisten denganSignRegiondalam string-to-sign.
Hitung
SignaturemenggunakanSigningKeydan string-to-sign.Signature = HEX(HMAC-SHA256(SigningKey, StringToSign))
Contoh perhitungan tanda tangan
Contoh berikut menunjukkan cara menghitung tanda tangan dengan memanggil operasi PutObject.
Parameter untuk perhitungan tanda tangan
Parameter | Nilai |
AccessKeyId | LTAI**************** |
AccessKeySecret | yourAccessKeySecret |
Timestamp | 20250411T064124Z |
Bucket | examplebucket |
Object | exampleobject |
Region | cn-hangzhou |
Contoh perhitungan tanda tangan
Buat permintaan kanonisasi.
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 tanda tangan.
Hitung SigningKey.
CatatanUntuk kemudahan pembacaan,
SigningKeyberikut ditampilkan dalam format heksadesimal.3543b7686e65eda71e5e5ca19d548d78423c37e8ddba4dc9d83f90228b457c76Hitung Signature.
053edbf550ebd239b32a9cdfd93b0b2b3f2d223083aa61f75e9ac16856d61f23