全部产品
Search
文档中心

Object Storage Service:Mengatasi error signature

更新时间:Mar 20, 2026

OSS mengembalikan error SignatureDoesNotMatch ketika signature dalam permintaan Anda tidak sesuai dengan yang dihitung oleh server. Badan respons error mencakup bidang diagnostik yang secara tepat mengidentifikasi lokasi ketidaksesuaian tersebut.

Contoh respons error:

StringToSign = VERB + "\n"
             + Content-MD5 + "\n"              /* hash MD5 dari badan permintaan; biarkan kosong jika tidak ada badan */
             + Content-Type + "\n"             /* jenis MIME; biarkan kosong jika tidak diatur */
             + Date + "\n"                     /* nilai header Date HTTP */
             + CanonicalizedOSSHeaders         /* header x-oss-* yang diurutkan */
             + CanonicalizedResource           /* Bucket + jalur + subsumber daya */

Signature = base64(hmac-sha1(AccessKeySecret, StringToSign))
BidangDeskripsi
SignatureProvidedString signature yang dikirim oleh client Anda
StringToSignString yang digunakan server untuk menghitung signature yang diharapkan
StringToSignBytesNilai byte heksadesimal dari StringToSign — berguna untuk mendiagnosis masalah pengkodean (encoding)
RequestIdPengidentifikasi unik permintaan yang dapat Anda berikan saat menghubungi Alibaba Cloud Support

Pemecahan Masalah

Lakukan langkah-langkah berikut secara berurutan. Hentikan pada langkah yang berhasil mengatasi error.

Langkah 1: Verifikasi ID AccessKey dan rahasia AccessKey Anda

Login ke ossbrowser menggunakan ID AccessKey dan rahasia AccessKey yang digunakan aplikasi Anda. Jika login gagal, kredensial tersebut tidak valid atau telah dicabut—perbarui (rotate) dan perbarui aplikasi Anda.

Langkah 2: Verifikasi metode penandatanganan

OSS mendukung dua metode penandatanganan. Pastikan kode Anda menerapkan algoritma yang benar untuk metode yang Anda gunakan.

Metode 1: Sertakan signature dalam header Authorization

Untuk detailnya, lihat Include signatures in the Authorization header.

StringToSign = VERB + "\n"
             + Content-MD5 + "\n"              /* Hash MD5 dari badan permintaan; kosongkan jika tidak ada badan */
             + Content-Type + "\n"             /* Jenis MIME; kosongkan jika tidak diatur */
             + Date + "\n"                     /* Nilai header HTTP Date */
             + CanonicalizedOSSHeaders         /* Header x-oss-* yang diurutkan */
             + CanonicalizedResource           /* Bucket + path + subresource */

Signature = base64(hmac-sha1(AccessKeySecret, StringToSign))

Metode 2: Tambahkan signature ke URL

Untuk detailnya, lihat Add signatures to URLs.

StringToSign = VERB + "\n"
             + CONTENT-MD5 + "\n"              /* Biasanya kosong untuk URL yang ditandatangani sebelumnya */
             + CONTENT-TYPE + "\n"             /* Biasanya kosong untuk URL yang ditandatangani sebelumnya */
             + EXPIRES + "\n"                  /* Timestamp Unix saat URL kedaluwarsa */
             + CanonicalizedOSSHeaders         /* Header x-oss-* yang diurutkan */
             + CanonicalizedResource           /* Bucket + path + subresource */

Signature = urlencode(base64(hmac-sha1(AccessKeySecret, StringToSign)))
Catatan: Untuk menghindari implementasi manual algoritma signature, gunakan OSS SDK. SDK menangani perhitungan signature secara otomatis.

Langkah 3: Bandingkan nilai StringToSign

Server menyertakan StringToSign yang dihitungnya dalam respons error. Bandingkan dengan StringToSign yang dihasilkan client Anda.

Contoh permintaan:

PUT /bucket/abc?acl
Date: Wed, 24 May 2023 02:12:30 GMT
Authorization: OSS qn6q**************:77Dv****************
x-oss-abc: mymeta

StringToSign yang dihasilkan:

PUT\n                              /* Metode HTTP */
\n                                 /* Content-MD5 (kosong — tidak ada badan) */
\n                                 /* Content-Type (kosong — tidak diatur) */
Wed, 24 May 2023 02:12:30 GMT\n   /* Date */
x-oss-abc:mymeta\n                /* CanonicalizedOSSHeaders */
/bucket/abc?acl                   /* CanonicalizedResource */

Periksa setiap bidang secara berurutan:

BidangYang harus diperiksa
Metode HTTPSesuai dengan kata kerja HTTP permintaan (PUT, GET, dll.)
Content-MD5Kosong kecuali Anda mengatur header Content-MD5 dalam permintaan
Content-TypeKosong kecuali Anda mengatur header Content-Type dalam permintaan
DateSesuai persis dengan nilai header Date, termasuk spasi putih
CanonicalizedOSSHeadersSemua header x-oss-* disertakan, diubah ke huruf kecil, dipangkas, dan diurutkan secara alfabetis
CanonicalizedResourceNama bucket, path objek, dan subresource semuanya ada dan diformat dengan benar

Jika StringToSign dalam respons error berbeda dari yang dihasilkan client Anda, perbedaan tersebut menunjukkan bidang mana yang perlu diperbaiki.

Tips: Gunakan StringToSignBytes dari respons error untuk mendeteksi karakter tak terlihat atau masalah pengkodean. Tempelkan urutan heksadesimal tersebut ke decoder dan bandingkan byte per byte dengan output client Anda.