全部产品
Search
文档中心

Object Storage Service:Sertakan signature V4 di header (direkomendasikan)

更新时间:Feb 15, 2026

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

Java

OSSV4Signer.java

Python

v4.py

Go

v4.go

JavaScript

client.js

PHP

SignerV4.php

C#

SignerV4.cs

Android

OSSV4Signer.java

Swift

SignerV4.swift

Objective-C

OSSV4Signer.m

C++

SignerV4.cc

C

oss_auth.c

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:

<AccessKeyId>/<SignDate>/<SignRegion>/oss/aliyun_v4_request

Di mana:

  • AccessKeyId: ID AccessKey Anda. Identifier unik ini memverifikasi identitas pemohon.

  • SignDate: Tanggal signature, dalam format YYYYMMDD.

  • SignRegion: ID wilayah yang digunakan untuk permintaan, seperti cn-hangzhou.

  • oss: String tetap. Mengidentifikasi layanan yang diminta sebagai Alibaba Cloud Object Storage Service (OSS).

  • aliyun_v4_request: String tetap. Menentukan versi signature permintaan sebagai V4.

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:

content-disposition;content-length

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:

3938**********************************dcdc

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:

image

Proses perhitungan signature terdiri dari tiga langkah:

  1. Buat canonical request: Format permintaan sesuai spesifikasi signature OSS untuk membuat canonical request.

  2. Buat string-to-sign: Proses canonical request untuk menghasilkan string-to-sign.

  3. 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 PayLoad

Canonical 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 (/).

  • Jika target permintaan adalah layanan OSS, jalur resourcenya adalah /, dan jalur resource yang di-encode URI adalah UriEncode("/").

  • Jika target permintaan adalah bucket, jalur resourcenya adalah /examplebucket/, dan jalur resource yang di-encode URI adalah UriEncode("/examplebucket/").

  • Jika target permintaan adalah objek dalam bucket, jalur resourcenya adalah /examplebucket/exampleobject, dan jalur resource yang di-encode URI adalah UriEncode("/examplebucket/exampleobject")

Canonical Query String

Parameter kueri yang telah di-encode URI, diurutkan secara leksikografis.

  • Jika parameter kueri mencakup nama dan nilai, encode URI setiap nama dan nilai parameter secara terpisah. Lalu, urutkan parameter secara leksikografis berdasarkan nama yang telah di-encode. Perhatikan bahwa pengurutan dilakukan setelah encoding. Gunakan = untuk menghubungkan nama dan nilai yang telah di-encode. Gunakan & untuk menggabungkan parameter yang berbeda.

    • Parameter kueri: prefix=somePrefix&marker=someMarker&max-keys=20

    • Parameter kueri canonical:

      UriEncode("marker")+"="+UriEncode("someMarker")+"&"+UriEncode("max-keys")+"="+UriEncode("20")+"&"+UriEncode("prefix")+"="+UriEncode("somePrefix")
  • Jika parameter kueri hanya berisi nama, encode URI nama parameter tersebut.

    • Parameter kueri: ?acl

    • Parameter kueri canonical: UriEncode("acl")

  • Jika tidak ada parameter kueri (URI permintaan tidak mengandung ?), atur canonical query string menjadi string kosong ("").

Canonical Headers

Daftar header permintaan.

Header permintaan terbagi menjadi tiga kategori:

  • Header yang harus ada dalam permintaan dan ikut dalam perhitungan signature:

    • x-oss-content-sha256: Saat ini hanya UNSIGNED-PAYLOAD yang didukung.

  • Header yang ikut dalam perhitungan signature jika ada dalam permintaan:

    • Content-Type

    • Content-MD5

    • x-oss-*: Header permintaan lain yang diawali dengan x-oss-. Misalnya, saat mengakses melalui AccessKey STS, SecurityToken ditentukan menggunakan x-oss-security-token:security-token. Sebagai contoh lain, waktu permintaan ditentukan menggunakan x-oss-date, dan formatnya harus sesuai standar waktu ISO 8601, seperti 20231203T121212Z.

  • Header permintaan opsional yang ditentukan dalam AdditionalHeaders.

Formatnya sebagai berikut:

Lowercase(<HeaderName1>) + ":" + Trim(<value>) + "\n"
Lowercase(<HeaderName2>) + ":" + Trim(<value>) + "\n"
...
Lowercase(<HeaderNameN>) + ":" + Trim(<value>) + "\n"

Contoh:

content-disposition:attachment
content-length:3
content-md5:ICy5YqxZB1uWSwcVLSNLcA==
content-type:text/plain
x-oss-content-sha256:UNSIGNED-PAYLOAD
x-oss-date:20250328T101048Z

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 AdditionalHeaders.

Contoh:

content-disposition;content-length

Hashed PayLoad

Representasi heksadesimal dari nilai hash SHA256 muatan permintaan. Saat ini hanya UNSIGNED-PAYLOAD yang didukung.

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 OSS4-HMAC-SHA256.

TimeStamp

Waktu UTC saat ini. Formatnya harus ISO8601, seperti 20250320T083322Z.

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:

<SignDate>/<SignRegion>/oss/aliyun_v4_request

Penjelasan:

  • SignDate: Tanggal yang digunakan dalam signature, dalam format YYYYMMDD.

  • SignRegion: ID wilayah yang digunakan untuk signature, seperti cn-hangzhou.

  • oss: Nama layanan yang digunakan dalam signature, tetap sebagai oss.

  • aliyun_v4_request: Versi yang digunakan dalam signature, tetap sebagai aliyun_v4_request.

CanonicalRequest

Canonical request yang telah dibuat.

3. Menghitung Tanda Tangan

Perhitungan signature terdiri dari dua langkah:

  1. 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 format YYYYMMDD. Harus sesuai dengan SignDate dalam string-to-sign.

    • Region: ID wilayah yang digunakan untuk signature, seperti cn-hangzhou. Harus sesuai dengan SignRegion dalam string-to-sign.

  2. Gunakan SigningKey dan string-to-sign untuk menghitung Signature.

    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

  1. 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-PAYLOAD
  2. Buat string-to-sign.

    OSS4-HMAC-SHA256
    20250411T064124Z
    20250411/cn-hangzhou/oss/aliyun_v4_request
    c46d96390bdbc2d739ac9363293ae9d710b14e48081fcb22cd8ad54b63136eca
  3. Hitung signature.

    1. Hitung SigningKey.

      Catatan
      • Untuk kemudahan membaca, SigningKey ditampilkan dalam format heksadesimal di bawah ini.

      • Kombinasi parameter signature yang berbeda menghasilkan nilai SigningKey yang berbeda. Contoh ini hanya sebagai referensi; gunakan hasil perhitungan aktual Anda.

      3543b7686e65eda71e5e5ca19d548d78423c37e8ddba4dc9d83f90228b457c76
    2. Hitung Signature.

      053edbf550ebd239b32a9cdfd93b0b2b3f2d223083aa61f75e9ac16856d61f23